你的ABAP程序给佛祖开过光么?来试试Jerry这个小技巧
最近Jerry在忙一个项目,技术栈换成了nodejs平台,语言换成了JavaScript,因为赶项目进度,一直没时间更新公众号。感谢大家的支持,关注人数还是慢慢地增长到了3000。
今天我们来聊聊一个比较轻松的话题。
当今这个数字化时代,大家的生活都离不开互联网。互联网公司为了确保服务器不会因为软硬件问题宕机而影响自己的业务,纷纷使出浑身解数,包括设计更健壮的架构,实现高质量的代码,提供硬件条件更好的机房等。当然也有一些脑洞大开的公司,另辟蹊径,采取让佛祖对服务器进行开光的方式,来实现"服务器永不宕机"的美好愿望。
下面是Jerry从一则搜狐新闻上看到的一些有趣的图片,转贴于此,新闻原文网址:
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”,程序员还是得老老实实练好自己的内功,而不要把自己的命运交给佛祖。毕竟国内这么多程序员,这么多行代码,要是每一位程序员每一行代码都要由佛祖开光,佛祖得多累鸭,佛祖忙不过来鸭!
更多阅读
你的ABAP程序给佛祖开过光么?来试试Jerry这个小技巧的更多相关文章
- 小程序内置组件swiper,circular(衔接)使用小技巧
swiper,关于滑块的一些效果无缝,断点,视差等等...我想这里就不用做太多的赘述,这里给大家分享一下实战项目中使用circular(衔接)的一点小特性.小技巧,当然你也可以理解为遇到了一个小坑,因 ...
- ABAP程序运行锁定
转自http://www.cnblogs.com/aBaoRong/archive/2012/06/15/2550458.html ABAP 程序运行锁 1. create a Table ZRUNN ...
- [SAP ABAP开发技术总结]ABAP程序之间数据共享与传递
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- 通过ABAP程序创建透明表
最近在解决用户账号问题的时候,需要通过ABAP程序创建透明表,查询了相关资料,总结如下. 通过ABAP程序创建透明表,主要利用了4个函数: DDIF_TABL_ACTIVATE: 激活透明表 GOX_ ...
- ini配置文件在LINUX下面程序打不开?
ini配置文件在LINUX下面程序打不开? 在WINDOWS里面编辑的INI配置文件保存时默认是ANSI字符编码,LINUX可能不识别,导致LINUX程序不能打开INI配置文件,成功读取里面的参数. ...
- SAP S4HANA 账户组的配置里'Int.Std.Grping'选项没勾选导致ABAP程序报错
SAP S4HANA 账户组的配置里'Int.Std.Grping'选项没勾选导致ABAP程序报错 BP,试图创建一个新的vendor code, 角色是ZGM001, Grouping是G001, ...
- 在SAP云平台ABAP编程环境上编写第一段ABAP程序
距2017年秋季的SAP TechEd大会上一位大佬Björn Goerke,SAP's Chief Technology Officer宣布了SAP Cloud Platform即将支持ABAP至今 ...
- 微信小程序客服消息开发实战:实时在手机上接收小程序客服消息通知,以及在手机上回复
在微信小程序开发中,可以非常方便的集成客服功能,只需要一行代码便可以将用户引导至客服会话界面.这行代码就是: <button open-type="contact" bind ...
- gdb调试运行时的程序小技巧
使用gdb调试运行时的程序小技巧 标签: 未分类 gdb pstack | 发表时间:2012-10-15 04:32 | 作者:士豪 分享到: 出处:http://rdc.taobao.com/bl ...
随机推荐
- Linux系统资源查看 之 资源信息
1. 系统 版本信息 内核版本 使用 uname 命令: -a : 查看所有系统信息 -r : 查看内核版本信息 -s : 查看内核名称 代码如下: [niesh@niesh ~]$ uname -a ...
- Jquery ui draggable在chrome和ie7下的bug
当页面足够长,向下滚动一些之后, 在拖动时,被拖动的div会向下产生滚动距离那么高(scrolltop)的差距 鼠标位置距div顶部差距了正好页面scroll的距离,页面scoll越多差的越多. 解决 ...
- 微信小程序头部栏实现
效果如图: 也就是实现红色框的部分. wxml代码 <view class="header {{scrollDown?'scrolled':''}}"> <vie ...
- git分支简介,理解HEAD,master
为了真正理解 Git 处理分支的方式,我们需要回顾一下 Git 是如何保存数据的. 或许你还记得 起步 的内容,Git 保存的不是文件的变化或者差异,而是一系列不同时刻的文件快照. 在进行提交操作时, ...
- 规范大于编码-我的javaWeb开发规范
1.应用名称和数据库名称一致 2.javaBean类名称+s和数据库表名一致 3.返回一条数据时,变量名为javaBean类名称的小写;返回多条数据时,变量名为javaBean类名称的大写 4.jav ...
- Yarn vs npm:你需要知道的一切(转)
转载:https://zhuanlan.zhihu.com/p/23493436 原文链接:Yarn vs npm: Everything You Need to Know Facebook.Goog ...
- 51Nod1053 最大M子段和V2 二分+DP
传送门 直接DP的话最多也只能做到\(O(nm)\),对于\(5\times 10^4\)的数据范围实在无能为力 夹克老爷提供的做法是贪心,思想大概是在调整的同时,合理构造每个选择对应的新状态,使得新 ...
- JavaScript正则表达式检验手机号码、邮箱、ip地址等
1)检测IP地址的正则表达式 ((2 [0-4] \d | 25[0-5] | [01]?\d\d?) \.){3}(2 [0-4] \d | 25[0-5] | [01]?\d\d?) 2 [0-4 ...
- ctcms Nginx 伪静态
location /whole { rewrite ^/whole/(.+).html$ /index.php?c=whole&key=$1; } location /show { rewri ...
- oracle 分组取第一行数据 ,查询sql语句
oracle 分组取第一行数据 SELECT * FROM ( SELECT ROW_NUMBER() OVER(PARTITION BY x ORDER BY y DESC) rn, t.* FR ...