你的ABAP程序给佛祖开过光么?来试试Jerry这个小技巧-阿里云开发者社区

开发者社区> jerrywangsap> 正文

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

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

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


image.png


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


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


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


http://www.sohu.com/a/116621959_430930


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


image.pngimage.png




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


image.png


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


image.png


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


image.pngimage.png




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


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

image.png



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


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

image.png



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


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


image.png


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


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


image.png


http://sapexperts.wispubs.com/SAP-Professional-Journal/Articles/From-XML-to-ABAP-Data-Structures-and-Back-Bridging-the-Gap-with-XSLT?id=2CA6B036062F42C5B7A76A772A934911#.WmGiiaiWbdM

image.png



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


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


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


image.png


佛祖保佑,永无bug


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


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


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


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


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


image.png


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


image.png

image.png



这段隐式增强的代码我放在了我的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”,程序员还是得老老实实练好自己的内功,而不要把自己的命运交给佛祖。毕竟国内这么多程序员,这么多行代码,要是每一位程序员每一行代码都要由佛祖开光,佛祖得多累鸭,佛祖忙不过来鸭!

image.png



更多阅读


动手使用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代码


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
我为什么要放弃 RESTful,选择拥抱 GraphQL
REST作为一种现代网络应用非常流行的软件架构风格,自从Roy Fielding博士在2000年他的博士论文中提出来到现在已经有了20年的历史。它的简单易用性,可扩展性,伸缩性受到广大Web开发者的喜爱。
9 0
如何保障消息中间件 100% 消息投递成功?如何保证消息幂等性?
一、前言 我们小伙伴应该都听说够消息中间件MQ,如:RabbitMQ,RocketMQ,Kafka等。引入中间件的好处可以起到抗高并发,削峰,业务解耦的作用。
12 0
Google 开源的依赖注入库,比 Spring 更小更快!
Guice是Google开源的一个依赖注入类库,相比于Spring IoC来说更小更快。Elasticsearch大量使用了Guice,本文简单的介绍下Guice的基本概念和使用方式。
10 0
首长,Redis 性能优化十三条军规立好了,请过目~
Redis作为高性能的内存数据库,在大数据量的情况下也会遇到性能瓶颈,日常开发中只有时刻谨记优化铁则,才能使得Redis性能发挥到极致。 本文将会介绍十三条性能优化军规,开发过程中只要按照执行,性能必能质的飞跃。
18 0
听说 Spring AOP 有坑?那就来踩一踩
前言 前几日,有朋友分享了这样一个案例: 原来的项目一直都正常运行,突然
10 0
我为什么要放弃 RESTful,选择拥抱 GraphQL
REST作为一种现代网络应用非常流行的软件架构风格,自从Roy Fielding博士在2000年他的博士论文中提出来到现在已经有了20年的历史。它的简单易用性,可扩展性,伸缩性受到广大Web开发者的喜爱。
9 0
【保姆级教程】Spring Boot 单元测试
【保姆级教程】Spring Boot 单元测试 一、 单元测试的概念 概念: \1. 单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。在Java中单元测试的最小单元是类。
7 0
一次非常有意思的 SQL 优化经历:从 30248.271s 到 0.001s
场景 我用的数据库是mysql5.6,下面简单的介绍下场景
9 0
+关注
2628
文章
0
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载