`
JerryWang_SAP
  • 浏览: 1004149 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

你的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计算机科学家们的介绍,比如这个链接:

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

 

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

 

更多阅读

0
0
分享到:
评论

相关推荐

    ABAP程序相互调用

    ABAP程序相互调用是指在ABAP中,通过SUBMIT关键字实现程序之间的调用,这是一个非常有用的关键字。下面我们将详细介绍ABAP程序相互调用的方法和用法。 一、调用另一个程序 在ABAP中,我们可以使用SUBMIT关键字来...

    ABAP程序的8种类型

    包含程序是一种特殊的程序类型,包含了不能独立运行的程序代码,也就是说,无论你是在 SE38 里用执行功能还是通过事务码或菜单调用,都无法打开一个包含程序。它们的作用主要是让程序变得清晰和可以被重用,在其他...

    ABAP程序下载工具 1.4.4

    然后,工具会执行后台查询,收集所有匹配的ABAP源代码,并将它们打包成一个文件,这个文件就是"ABAP程序下载工具"压缩包中的内容。 标签"SAP ABAP"明确了这个工具的核心技术领域。SAP是一个全球广泛使用的业务软件...

    下载ABAP程序源代码的程序.pdf

    下载ABAP程序源代码的程序 ABAP(Advanced Business Application Programming)是一种高级商业应用程序编程语言,主要用于SAP R/3系统中。ABAP语言具有强大的编程能力、灵活的数据类型、丰富的内置函数和强大的错误...

    如何在后台模式下调试程序ABAP程序的运行

    "如何在后台模式下调试程序ABAP程序的运行" ABAP程序调试是SAP系统中的一种重要功能,用于检测和解决程序中的错误。后台调试是ABAP程序调试的一种方式,指的是在后台模式下调试程序的运行。下面我们将详细介绍如何...

    批量下载abap程序-改造版

    批量下载abap程序-改造版

    abap程序批量下载

    - **学习与培训**:对于新入职的开发人员来说,这是一个非常好的学习资源。 #### 四、技术细节 1. **版本控制**: - 该工具版本号为1.5.0,针对不同SAP版本提供了相应的支持。 - 针对老版本SAP系统的Direct ...

    ABAP实用小程序汇总

    这个"ABAP实用小程序汇总"显然是一份包含了多种ABAP编程实例和技巧的资源集合,非常适合初学者进行学习和实践。下面我们将深入探讨一些ABAP的基础知识以及可能在这些小程序中涉及的技巧。 1. **基础语法**: ABAP...

    ABAP 子程序及其调用

    这可以通过在多个程序中使用相同的公共声明来实现。例如: ```abap DATA: BEGIN OF COMMON PART , , END OF COMMON PART. ``` 这里`<name>`是公共部分的名称,`<data declaration>`是数据声明。为了保证一致性,...

    ABAP 通过程序中的关键字查找程序名和首次出现的行数

    ABAP程序 通过程序中的关键字查找程序名和首次出现的行数,双击程序名进入程序

    abap xlsx2 demo 程序

    为了更好地理解这个示例程序的工作原理,你需要查看源代码,特别是主程序逻辑、调用的函数模块以及任何自定义的ABAP类。同时,检查相关的注释和文档,可以帮助你学习和复用这个示例。 总的来说,"abap xlsx2 demo ...

    SAP ABAP程序性能调优介绍.pptx

    SAP ABAP 程序性能调优是指通过对程序的优化来提高 SAP 系统的性能。性能调优是 SAP 系统管理员和开发人员的重要任务之一,因为它可以直接影响到用户的体验和业务的效率。 用户交互过程是 SAP 系统的核心部分,包括...

    手把手教你配置Eclipse开发SAP ABAP程序环境.docx

    从零开始,教授如何配置 Eclipse 开发 SAP ABAP 程序环境。2020 年最新版本操作...ABAP Development Tool的Java端实现就是Eclipse的一个扩展,使用JCO(Java Connector)连接ABAP后台的adt服务,实现对ABAP程序的操作。

    实战ABAP程序开发

    在“实战ABAP程序开发”这个主题中,我们可以深入探讨几个关键的知识点: 1. **第一章 ABAP开发环境和总体介绍**:这部分内容会引导初学者了解ABAP的开发环境,包括SE80事务码的使用,如何创建和管理源代码,以及...

    ABAP程序性能优化

    4. **优化循环逻辑**:对于两个大数据量的内表,可以使用特定的技巧来优化循环逻辑,比如使用二分查找结合排序,或通过外部变量指针来避免不必要的数据复制。 #### 四、优化标准函数模块使用 1. **优化`READ_TEXT`...

    abap报表程序事例,学习报表

    在ABAP(Advanced Business Application Programming)中,报表程序是用于生成和展示数据的重要工具...这两个简单的报表程序实例,作为学习的起点,将为你打开ABAP世界的大门,引领你逐步探索更深层次的ABAP开发技术。

    ABAP的程序的类型

    以上代码展示了如何使用ABAP编写一个完整的REPORT程序来查询并展示SAP系统中的数据。 #### 四、总结 ABAP REPORT程序是SAP开发中最常见的程序类型之一,通过定义数据结构、查询条件以及处理逻辑,可以实现对SAP...

    生成XML文件ABAP程序

    根据提供的ABAP程序片段,我们可以总结出以下关于生成XML文件的相关知识点: ### 1. ABAP中的IXML库介绍 ABAP(Advanced Business Application Programming)是SAP系统中广泛使用的一种编程语言。在处理XML数据时...

    SAP变式配置-相关性程序如何调用ABAP函数[参照].pdf

    这个步骤是将ABAP函数与相关性程序集成,实现复杂的算法和业务逻辑。 通过这三个步骤,相关性程序可以调用ABAP函数,实现复杂的算法和业务逻辑。此外,使用ABAP语言编写代码,可以实现灵活的业务逻辑和算法,满足...

    深入ABAP程序设计

    深入ABAP程序设计,探索其在SAP R/3系统中的关键作用与实践,是IT专业人士尤其是SAP开发者的重要学习方向。ABAP(高级商业应用编程语言)是SAP R/3系统的核心编程语言,其设计与应用覆盖了从数据库访问、业务逻辑...

Global site tag (gtag.js) - Google Analytics