你的ABAP程序給佛祖開過光麼?來試試Jerry這個小技巧

最近Jerry在忙一個項目,技術棧換成了nodejs平臺,語言換成了JavaScript,由於趕項目進度,一直沒時間更新公衆號。感謝你們的支持,關注人數仍是慢慢地增加到了3000。node

今天咱們來聊聊一個比較輕鬆的話題。git

當今這個數字化時代,你們的生活都離不開互聯網。互聯網公司爲了確保服務器不會由於軟硬件問題宕機而影響本身的業務,紛紛使出渾身解數,包括設計更健壯的架構,實現高質量的代碼,提供硬件條件更好的機房等。固然也有一些腦洞大開的公司,另闢蹊徑,採起讓佛祖對服務器進行開光的方式,來實現"服務器永不宕機"的美好願望。程序員

下面是Jerry從一則搜狐新聞上看到的一些有趣的圖片,轉貼於此,新聞原文網址:github

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」,程序員仍是得老老實實練好本身的內功,而不要把本身的命運交給佛祖。畢竟國內這麼多程序員,這麼多行代碼,要是每一位程序員每一行代碼都要由佛祖開光,佛祖得多累鴨,佛祖忙不過來鴨!

更多閱讀

相關文章
相關標籤/搜索