资讯专栏INFORMATION COLUMN

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

SQC / 984人阅读

摘要:实现步骤非常简单,在标准程序的内创建一个隐式增强。禁止在测试服务器和生产服务器使用否则由此造成的一切负面后果,本人及概不负责。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

为什么这篇文章要把C语言和ABAP放在一起讲,而不是别的语言比如Java和ABAP呢?因为ABAP语言底层是基于C/C++实现的,包括其关键字(比如最简单的关键字WRITE的C++实现有2千多行)和虚拟机(ABAP Runtime)。SAP内部的一群计算机科学家们发明了ABAP这门伟大的语言,由它实现的各种SAP应用帮助了全球超过180个国家和地区的客户们更好地运行其业务。

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

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

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

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

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

佛祖保佑,永无bug

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

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

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

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

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

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

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

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

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

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

最后也是最重要的

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

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

更多阅读

动手使用ABAP Channel开发一些小工具,提升日常工作效率

聊聊C语言和ABAP

ABAP vs Java, 蛙泳 vs 自由泳

300行ABAP代码实现一个最简单的区块链原型

Jerry的ABAP原创技术文章合集

ABAP开发人员未来应该学些什么

Jerry的ABAP, Java和JavaScript乱炖

我用ABAP做过的那些无聊的事情

不喜欢SAP GUI?那试试用Eclipse进行ABAP开发吧

那些年我用过的SAP IDE

使用Visual Studio Code编写和激活ABAP代码

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/109059.html

相关文章

  • #私藏项目实操分享# 使用 JavaScript 上传 PDF 和 Excel 等二进制文件到 AB

    摘要:这是年的第篇文章,也是汪子熙公众号总共第篇原创文章。使用通过格式发送和文件到服务器关于格式的详细说明,参考开发社区和的文档我在前文例子的基础上稍作修改在里使用两个类型为的标签,分别上传和文件用来测试的本地文件,大小为字节。 这是 Jerry 2021 年的第 71 篇文章,也是汪子熙公众号总共第 348 篇原创文章。 Jerry 之前发布过一篇文章 不使用任何框架,手写纯 Jav...

    peixn 评论0 收藏0
  • 不喜欢SAP GUI?那试试用Eclipse进行ABAP开发吧

    摘要:比如的的个性化设置是这样的,字体必须用程序猿专用的等宽开源字体,这样显得比较专业。我觉得网上流传的程序猿和工具的鄙视链很无聊,与其有时间去鄙视别人,不如把这时间用来深入研究自己每天用的,进一步提高自己单位时间内的工作效率。 Jerry和SAP成都研究院一些新同事聊天时,谈到ABAP和SAP GUI这个话题。很多新同事在加入SAP成都之前,是做Java和C++开发的,习惯了Eclipse...

    jkyin 评论0 收藏0
  • 我用ABAP做过的那些无聊的事情

    摘要:而且这种现象在德国的法定节假日里更加突出。所以本文提到的这些东西都是在德国节假日里无聊的产物,对于顾问的实际工作可能帮助不大。这也是在这篇文章里介绍的众多用搞出来的无聊的东西里唯一被官方认可的工具,囧。直接用执行里的事务码或者函数。 国庆大假马上就要来临了,我们聊点轻松的话题,关于假期。 Jerry的成都同事李贝宁(Li Ben), 《SAP成都研究院李三郎:SCP Applicati...

    wuaiqiu 评论0 收藏0
  • 那些年我用过的SAP IDE

    摘要:本文里提到的所有都是基于版本的,这使得我又一次被鄙视了使用的程序猿鄙视使用的程序猿。因此这些事物码本身也是可以通过进行增强的。 在Google上根据关键字程序员鄙视链搜索,会得到68多万条结果。 showImg(https://segmentfault.com/img/remote/1460000014000687); 玲琅满目的搜索结果里是众多不同维度划分的鄙视链。 其中有一个维度,...

    denson 评论0 收藏0
  • 那些年我用过的SAP IDE

    摘要:本文里提到的所有都是基于版本的,这使得我又一次被鄙视了使用的程序猿鄙视使用的程序猿。因此这些事物码本身也是可以通过进行增强的。 在Google上根据关键字程序员鄙视链搜索,会得到68多万条结果。 showImg(https://segmentfault.com/img/remote/1460000014000687); 玲琅满目的搜索结果里是众多不同维度划分的鄙视链。 其中有一个维度,...

    wawor4827 评论0 收藏0

发表评论

0条评论

SQC

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<