你的ABAP程序给佛祖开过光么?来试试Jerry这个小技巧
最近Jerry在忙一個項目,技術(shù)棧換成了nodejs平臺,語言換成了JavaScript,因為趕項目進度,一直沒時間更新公眾號。感謝大家的支持,關(guān)注人數(shù)還是慢慢地增長到了3000。
今天我們來聊聊一個比較輕松的話題。
當今這個數(shù)字化時代,大家的生活都離不開互聯(lián)網(wǎng)。互聯(lián)網(wǎng)公司為了確保服務(wù)器不會因為軟硬件問題宕機而影響自己的業(yè)務(wù),紛紛使出渾身解數(shù),包括設(shè)計更健壯的架構(gòu),實現(xiàn)高質(zhì)量的代碼,提供硬件條件更好的機房等。當然也有一些腦洞大開的公司,另辟蹊徑,采取讓佛祖對服務(wù)器進行開光的方式,來實現(xiàn)"服務(wù)器永不宕機"的美好愿望。
下面是Jerry從一則搜狐新聞上看到的一些有趣的圖片,轉(zhuǎn)貼于此,新聞原文網(wǎng)址:
http://www.sohu.com/a/116621959_430930
有請高僧給服務(wù)器貼上靈符:
看著這個符咒,Jerry想起了自己曾經(jīng)通關(guān)過無數(shù)遍的仙劍奇?zhèn)b傳98柔情版里各種各樣的靈符。
高僧正在認真地進行開光儀式:
這些難道是IT管理員,或者SAP稱呼的Basis們,虔誠地跪在服務(wù)器前向佛祖祈禱“永不宕機”嗎?
除了“永不宕機”外,“永無bug”也是程序員們另一個美好的愿望。
于是乎,有些程序員希望通過在代碼頭部加上這種注釋,來獲得一些心理上的慰藉。
而對于SAP ABAP程序員,一看到bug這個詞,最容易聯(lián)想到什么?不知道大家心中的答案是什么,Jerry的答案是:ST22。
ABAP程序在執(zhí)行時,如果遇到了沒有捕捉的異常,程序會終止,同時ABAP運行時會產(chǎn)生一個類似Windows系統(tǒng)藍屏的core dump:
這種dump可以在事務(wù)碼ST22里查看。一般來說,一個有經(jīng)驗的ABAP程序員,通過分析ST22里提供的程序崩潰時的上下文信息,系統(tǒng)變量的內(nèi)容,調(diào)用棧等等,不難修復這種bug。
下圖是ST22里dump的一個例子,值得一提的是大家可能會忽略的BASIS Developer View, 里面包含了引起運行時錯誤的ABAP語句對應的C語言實現(xiàn)的具體文件位置,比如下圖的**//bas/753_STACK/src/krn/abap/runt/abassert.c**。
大家還記得我寫過的聊聊C語言和ABAP?這篇文章么?
這里我偷個懶,把那篇文章里介紹C語言和ABAP語言關(guān)系的文字引用過來:
為什么這篇文章要把C語言和ABAP放在一起講,而不是別的語言比如Java和ABAP呢?因為ABAP語言底層是基于C/C++實現(xiàn)的,包括其關(guān)鍵字(比如最簡單的關(guān)鍵字WRITE的C++實現(xiàn)有2千多行)和虛擬機(ABAP Runtime)。SAP內(nèi)部的一群計算機科學家們發(fā)明了ABAP這門偉大的語言,由它實現(xiàn)的各種SAP應用幫助了全球超過180個國家和地區(qū)的客戶們更好地運行其業(yè)務(wù)。
通過Google我們能搜索到一些關(guān)于這些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內(nèi)部的Netweaver開發(fā)服務(wù)器上是能夠瀏覽這些C語言代碼的。Jerry 2017年在德國工作時,業(yè)余時間比較多,相關(guān)的C代碼也閱讀了不少,比如ABAP里最簡單的WRITE關(guān)鍵字,其C語言實現(xiàn)有2000多行。可惜因為這些C語言實現(xiàn)對客戶和partner不可見,因此無法在這里給大家分享它們的邏輯。
再回到ST22。相信每一位ABAP程序員運行代碼看到ST22的dump后,心里都會很沮喪。這個時候,如果有佛祖能夠給引起bug的代碼開開光,那將是一件很鼓舞人心的事情。
相信無論使用何種編程語言的程序員,看到下圖紅色高亮的這兩行字,都會精神為之一振:
-
佛祖保佑,永無bug
-
這段代碼佛祖已經(jīng)做過開光處理,絕無可能再產(chǎn)生bug
如何實現(xiàn)ST22里這個顯示效果?其實ST22和Windows系統(tǒng)藍屏顯示邏輯一樣,都是一段靜態(tài)模板文本加上運行時異常的實際動態(tài)內(nèi)容合并而成。
模板文字存儲在ABAP Netweaver服務(wù)器的數(shù)據(jù)庫表里。我們只需要在ST22的框架代碼把模板文本從數(shù)據(jù)庫表讀出之后,將佛祖開光的文本動態(tài)添加到模板文本的頭部,就大功告成了。
實現(xiàn)步驟非常簡單,在ST22標準程序SAPMS380的subroutine?read_snapt內(nèi)創(chuàng)建一個隱式增強。
從read_snapt的代碼能看出ST22的模板文本是存儲在數(shù)據(jù)庫表SNAPT里的。
把佛祖開光的文本注入到read_snapt輸出的頭部:
這段隱式增強的代碼我放在了我的Github上:
https://github.com/i042416/KnowlegeRepository/blob/master/ABAP/SmallApp/210_god.abap
最終效果就是每次出現(xiàn)了運行時程序執(zhí)行錯誤后,程序員到ST22里查看dump時,總能看到“佛祖保佑,永無BUG”幾個字。
這個例子其實也再次體現(xiàn)了Jerry之前提到的,作為ABAP開發(fā)環(huán)境和運行環(huán)境和二而一的Netweaver,給開發(fā)者提供了強大的可擴展性。
最后也是最重要的
1. 本文提供的步驟涉及到了對ABAP框架代碼的隱式增強,請謹慎使用。禁止在測試服務(wù)器和生產(chǎn)服務(wù)器使用! 否則由此造成的一切負面后果,Jerry本人及SAP概不負責。
2. 如果真的想確保自己交付的代碼“永無BUG”,程序員還是得老老實實練好自己的內(nèi)功,而不要把自己的命運交給佛祖。畢竟國內(nèi)這么多程序員,這么多行代碼,要是每一位程序員每一行代碼都要由佛祖開光,佛祖得多累鴨,佛祖忙不過來鴨!
更多閱讀
-
動手使用ABAP Channel開發(fā)一些小工具,提升日常工作效率
-
聊聊C語言和ABAP
-
ABAP vs Java, 蛙泳 vs 自由泳
-
300行ABAP代碼實現(xiàn)一個最簡單的區(qū)塊鏈原型
-
Jerry的ABAP原創(chuàng)技術(shù)文章合集
-
ABAP開發(fā)人員未來應該學些什么
-
Jerry的ABAP, Java和JavaScript亂燉
-
我用ABAP做過的那些無聊的事情
-
不喜歡SAP GUI?那試試用Eclipse進行ABAP開發(fā)吧
-
那些年我用過的SAP IDE
-
使用Visual Studio Code編寫和激活ABAP代碼
總結(jié)
以上是生活随笔為你收集整理的你的ABAP程序给佛祖开过光么?来试试Jerry这个小技巧的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2023年国内乘用车出口量有望超350万
- 下一篇: 传与大疆达成合作 全新海狮用上高级辅助驾