最近Jerry在忙一个项目,技术栈换成了nodejs平台,语言换成了JavaScript,由于赶项目进度,一直没时间更新公众号。感谢你们的支持,关注人数仍是慢慢地增加到了3000。node
今天咱们来聊聊一个比较轻松的话题。git
当今这个数字化时代,你们的生活都离不开互联网。互联网公司为了确保服务器不会由于软硬件问题宕机而影响本身的业务,纷纷使出浑身解数,包括设计更健壮的架构,实现高质量的代码,提供硬件条件更好的机房等。固然也有一些脑洞大开的公司,另辟蹊径,采起让佛祖对服务器进行开光的方式,来实现"服务器永不宕机"的美好愿望。程序员
下面是Jerry从一则搜狐新闻上看到的一些有趣的图片,转贴于此,新闻原文网址:github
http://www.sohu.com/a/116621959_430930数据库
有请高僧给服务器贴上灵符:编程
看着这个符咒,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计算机科学家们的介绍,好比这个连接:
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/KnowlegeRepository/blob/master/ABAP/SmallApp/210_god.abap
最终效果就是每次出现了运行时程序执行错误后,程序员到ST22里查看dump时,总能看到“佛祖保佑,永无BUG”几个字。
这个例子其实也再次体现了Jerry以前提到的,做为ABAP开发环境和运行环境和二而一的Netweaver,给开发者提供了强大的可扩展性。
最后也是最重要的
1. 本文提供的步骤涉及到了对ABAP框架代码的隐式加强,请谨慎使用。禁止在测试服务器和生产服务器使用! 不然由此形成的一切负面后果,Jerry本人及SAP概不负责。
2. 若是真的想确保本身交付的代码“永无BUG”,程序员仍是得老老实实练好本身的内功,而不要把本身的命运交给佛祖。毕竟国内这么多程序员,这么多行代码,要是每一位程序员每一行代码都要由佛祖开光,佛祖得多累鸭,佛祖忙不过来鸭!
更多阅读