你的ABAP程序给佛祖开过光么?来试试Jerry这个小技巧

栏目: C · 发布时间: 5年前

内容简介:最近Jerry在忙一个项目,技术栈换成了nodejs平台,语言换成了JavaScript,因为赶项目进度,一直没时间更新公众号。感谢大家的支持,关注人数还是慢慢地增长到了3000。今天我们来聊聊一个比较轻松的话题。

最近Jerry在忙一个项目,技术栈换成了nodejs平台,语言换成了JavaScript,因为赶项目进度,一直没时间更新公众号。感谢大家的支持,关注人数还是慢慢地增长到了3000。

你的ABAP程序给佛祖开过光么?来试试Jerry这个小技巧

今天我们来聊聊一个比较轻松的话题。

当今这个数字化时代,大家的生活都离不开互联网。互联网公司为了确保服务器不会因为软硬件问题宕机而影响自己的业务,纷纷使出浑身解数,包括设计更健壮的架构,实现高质量的代码,提供硬件条件更好的机房等。当然也有一些脑洞大开的公司,另辟蹊径,采取让佛祖对服务器进行开光的方式,来实现" 服务器永不宕机 "的美好愿望。

下面是Jerry从一则搜狐新闻上看到的一些有趣的图片,转贴于此,新闻原文网址:

http://www.sohu.com/a/1166219...

有请高僧给服务器贴上灵符:

你的ABAP程序给佛祖开过光么?来试试Jerry这个小技巧

你的ABAP程序给佛祖开过光么?来试试Jerry这个小技巧

看着这个符咒,Jerry想起了自己曾经通关过无数遍的仙剑奇侠传98柔情版里各种各样的灵符。

你的ABAP程序给佛祖开过光么?来试试Jerry这个小技巧

高僧正在认真地进行开光仪式:

你的ABAP程序给佛祖开过光么?来试试Jerry这个小技巧

这些难道是IT管理员,或者SAP称呼的Basis们,虔诚地跪在服务器前向佛祖祈祷“ 永不宕机 ”吗?

你的ABAP程序给佛祖开过光么?来试试Jerry这个小技巧

你的ABAP程序给佛祖开过光么?来试试Jerry这个小技巧

除了“ 永不宕机 ”外,“ 永无bug ”也是 程序员 们另一个美好的愿望。

于是乎,有些程序员希望通过在代码头部加上这种注释,来获得一些心理上的慰藉。

你的ABAP程序给佛祖开过光么?来试试Jerry这个小技巧

而对于SAP ABAP程序员,一看到bug这个词,最容易联想到什么?不知道大家心中的答案是什么,Jerry的答案是: ST22

ABAP程序在执行时,如果遇到了没有捕捉的异常,程序会终止,同时ABAP运行时会产生一个类似Windows系统蓝屏的core dump:

你的ABAP程序给佛祖开过光么?来试试Jerry这个小技巧

这种dump可以在事务码ST22里查看。一般来说,一个有经验的ABAP程序员,通过分析ST22里提供的程序崩溃时的上下文信息,系统变量的内容,调用栈等等,不难修复这种bug。

下图是ST22里dump的一个例子,值得一提的是大家可能会忽略的BASIS Developer View, 里面包含了引起运行时错误的ABAP语句对应的 C语言 实现的具体文件位置,比如下图的 //bas/753_STACK/src/krn/abap/runt/abassert.c

你的ABAP程序给佛祖开过光么?来试试Jerry这个小技巧

大家还记得我写过的 聊聊C语言和ABAP 这篇文章么?

这里我偷个懒,把那篇文章里介绍C语言和ABAP语言关系的文字引用过来:

通过Google我们能搜索到一些关于这些SAP计算机科学家们的介绍,比如这个链接:

http://sapexperts.wispubs.com...

你的ABAP程序给佛祖开过光么?来试试Jerry这个小技巧

SAP内部的Netweaver开发服务器上是能够浏览这些C语言代码的。Jerry 2017年在德国工作时,业余时间比较多,相关的C代码也阅读了不少,比如ABAP里最简单的WRITE关键字,其C语言实现有2000多行。可惜因为这些C语言实现对客户和partner不可见,因此无法在这里给大家分享它们的逻辑。

再回到ST22。相信每一位ABAP程序员运行代码看到ST22的dump后,心里都会很沮丧。这个时候,如果有佛祖能够给引起bug的代码开开光,那将是一件很鼓舞人心的事情。

相信无论使用何种编程语言的程序员,看到下图红色高亮的这两行字,都会精神为之一振:

你的ABAP程序给佛祖开过光么?来试试Jerry这个小技巧

  • 佛祖保佑,永无bug
  • 这段代码佛祖已经做过开光处理,绝无可能再产生bug

如何实现ST22里这个显示效果?其实ST22和Windows系统蓝屏显示逻辑一样,都是一段静态模板文本加上运行时异常的实际动态内容合并而成。

模板文字存储在ABAP Netweaver服务器的数据库表里。我们只需要在ST22的框架代码把模板文本从数据库表读出之后,将佛祖开光的文本动态添加到模板文本的头部,就大功告成了。

实现步骤非常简单,在ST22标准程序 SAPMS380 的subroutine  read_snapt 内创建一个 隐式增强

从read_snapt的代码能看出ST22的模板文本是存储在数据库表 SNAPT 里的。

你的ABAP程序给佛祖开过光么?来试试Jerry这个小技巧

把佛祖开光的文本注入到read_snapt输出的头部:

你的ABAP程序给佛祖开过光么?来试试Jerry这个小技巧

你的ABAP程序给佛祖开过光么?来试试Jerry这个小技巧

这段隐式增强的代码我放在了我的Github上:

https://github.com/i042416/Kn...

最终效果就是每次出现了运行时程序执行错误后,程序员到ST22里查看dump时,总能看到“ 佛祖保佑,永无BUG ”几个字。

这个例子其实也再次体现了Jerry之前提到的,作为 ABAP开发环境和运行环境和二而一的Netweaver ,给开发者提供了强大的可扩展性。

最后也是最重要的

1. 本文提供的步骤涉及到了对ABAP框架代码的隐式增强,请谨慎使用。禁止在测试服务器和生产服务器使用! 否则由此造成的一切负面后果,Jerry本人及SAP概不负责。

2. 如果真的想确保自己交付的代码“ 永无BUG ”,程序员还是得老老实实练好自己的内功,而不要把自己的命运交给佛祖。毕竟国内这么多程序员,这么多行代码,要是每一位程序员每一行代码都要由佛祖开光,佛祖得多累鸭,佛祖忙不过来鸭!

你的ABAP程序给佛祖开过光么?来试试Jerry这个小技巧

更多阅读


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

ACM程序设计

ACM程序设计

曾棕根 / 北京大学 / 2011-4 / 34.00元

《ACM程序设计(第2版)》详细讲解了ACM国际大学生程序设计竞赛(ACM/ICPC)编程、调试方法,以及提高时间、空间性能的策略,并充分利用了C++泛型编程的高效率、规范化的特性,全部采用C++泛型编程。第1章讲解了ACM程序设计入门知识;第2章讲解了C++泛型编程的容器、迭代器和常用算法;第3章讲解了ACM程序设计的基本编程技巧;第4章讲解了50道原版ACM竞赛题的解题思路,并配有C++泛型编......一起来看看 《ACM程序设计》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

SHA 加密
SHA 加密

SHA 加密工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换