最近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語言關系的文字引用過來:
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 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代碼