日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

跨网段远程调试vs_如何提高后台服务应用问题的排查效率?日志 VS 远程调试

發(fā)布時(shí)間:2023/12/10 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 跨网段远程调试vs_如何提高后台服务应用问题的排查效率?日志 VS 远程调试 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(zhuǎn)眼間,距離Jerry最近一篇文章推送已經(jīng)過(guò)去了一個(gè)多月的時(shí)間了。

公眾號(hào)更新的頻率降低,不是因?yàn)镴erry偷懶,而是由于從春節(jié)過(guò)后,我所在的SAP成都研究院數(shù)字創(chuàng)新空間整個(gè)團(tuán)隊(duì),一直在忙一個(gè)5月份需要交付的項(xiàng)目上。

Jerry每天的工作量像下面這張圖這樣:

這個(gè)項(xiàng)目里Jerry負(fù)責(zé)的是后臺(tái)開(kāi)發(fā)工作,我用nodejs開(kāi)發(fā)了若干微服務(wù),每個(gè)微服務(wù)實(shí)現(xiàn)一個(gè)特定的業(yè)務(wù)邏輯。這些微服務(wù)由Jerry另外開(kāi)發(fā)的一個(gè)編排器(Orchestra)統(tǒng)一調(diào)度。整套后臺(tái)實(shí)現(xiàn)部署在亞馬遜云平臺(tái)(Amazon Web Service,以下簡(jiǎn)稱(chēng)AWS)上。

離交付日期越來(lái)越近了,我們的功能也趕得差不多了。本地測(cè)試運(yùn)行得很好的場(chǎng)景,部署到AWS上運(yùn)行后出現(xiàn)了一些bug。比如昨天就遇到一個(gè)棘手的bug,因此有了今天這篇文章。

2014年五一節(jié)的前一天,當(dāng)時(shí)Jerry還在SAP CRM開(kāi)發(fā)團(tuán)隊(duì)工作,負(fù)責(zé)處理SAP CRM中間件的一個(gè)bug。這個(gè)bug和代碼執(zhí)行時(shí)序有關(guān),每執(zhí)行一次只有40%的幾率能重現(xiàn),花了我整整一天(8個(gè)小時(shí))的時(shí)間調(diào)試。因?yàn)橹噩F(xiàn)bug的場(chǎng)景太復(fù)雜,需要調(diào)試的ABAP代碼量太大,所以讓我印象深刻。那個(gè)bug處理完之后,我也對(duì)自己花了8小時(shí)才搞定該bug的效率很不滿(mǎn)意,因此寫(xiě)了一篇博客總結(jié)這次排錯(cuò)的經(jīng)驗(yàn)教訓(xùn):

My Tips about how to handle complex and tricky issues

https://blogs.sap.com/2014/05/01/my-tips-about-how-to-handle-complex-and-tricky-issues/

回到昨天我遇到的在AWS上出現(xiàn)的bug,根據(jù)問(wèn)題的表象,一開(kāi)始我和負(fù)責(zé)前端開(kāi)發(fā)的同事,連這個(gè)問(wèn)題出在前端還是后端都沒(méi)辦法判斷。當(dāng)微服務(wù)部署在本地并進(jìn)行測(cè)試時(shí)一切正常,只有部署在AWS上進(jìn)行集成測(cè)試時(shí)才會(huì)暴露,而運(yùn)行在AWS上的nodejs應(yīng)用,我昨天還不知道如何調(diào)試,因此只好采用我大二剛學(xué)C語(yǔ)言編程時(shí)用過(guò)的最笨的排查辦法:打日志。

2001年,在結(jié)束了一年的計(jì)算機(jī)專(zhuān)業(yè)基礎(chǔ)課學(xué)習(xí)后,Jerry開(kāi)始了Unix環(huán)境下C語(yǔ)言編程的學(xué)習(xí)。當(dāng)時(shí)我對(duì)gdb這種以命令提示行方式進(jìn)行的調(diào)試風(fēng)格很不適應(yīng),大多數(shù)時(shí)候的排錯(cuò)采用的還是在代碼里添加printf語(yǔ)句打印變量?jī)?nèi)容的方式來(lái)進(jìn)行,被寢室的同學(xué)鄙視了好久。

于是昨天我繼續(xù)采用了這種自己18年前就曾經(jīng)用過(guò)的排錯(cuò)方式:

1. 在可能引起bug的相關(guān)代碼處逐一加上日志輸出語(yǔ)句

2. 執(zhí)行會(huì)出現(xiàn)bug的用戶(hù)操作

3. 閱讀AWS上生成的日志語(yǔ)句

上述三個(gè)步驟是一個(gè)不斷迭代的過(guò)程。最開(kāi)始我加了若干日志輸出語(yǔ)句,執(zhí)行操作后閱讀生成的日志,發(fā)現(xiàn)沒(méi)有任何異常。于是不斷地增加新的日志打印代碼,最后導(dǎo)致了執(zhí)行一次操作,會(huì)生成1200行的日志輸出。

我和負(fù)責(zé)前端開(kāi)發(fā)的同事兩人坐在顯示器前,一行行檢查這海量的日志輸出。由于問(wèn)題是用戶(hù)第二次操作后才會(huì)暴露,每次操作會(huì)生成不同的會(huì)話,我們被迫不斷的上下滑動(dòng)屏幕來(lái)比較這兩次會(huì)話的uuid和相關(guān)的WebSocket uuid等變量。Jerry很快發(fā)現(xiàn),眼睛一眨不眨地盯著顯示器逐條檢查日志,時(shí)間一長(zhǎng)眼睛就痛得受不了。無(wú)奈之下,只得把這些日志用打印機(jī)打印出來(lái),用不同顏色的筆標(biāo)注出兩個(gè)會(huì)話對(duì)應(yīng)的各種變量,在紙上來(lái)回比對(duì)。于是就有了下面這些紙張:

雖然最后用這種辦法,成功排除了后臺(tái)出錯(cuò)的可能性,使我們得以把精力花在前臺(tái)代碼的審查上,但是像我一個(gè)同事評(píng)價(jià)的,“這種方式太不環(huán)保了”,并且我自己也覺(jué)得,效率太低了

后來(lái)好幾位熱心的同事告訴Jerry,就算運(yùn)行在SAP Cloud Platform或者AWS這些云平臺(tái)上的nodejs應(yīng)用,也是可以單步調(diào)試的,Jerry Google了一下,發(fā)現(xiàn)遠(yuǎn)程調(diào)試確實(shí)很簡(jiǎn)單,就兩條命令而已。

Jerry用我們創(chuàng)新空間團(tuán)隊(duì)另外一位同事Haytham開(kāi)發(fā)并部署在AWS上的一個(gè)nodejs應(yīng)用為例來(lái)嘗試如何在我的本地電腦上對(duì)其進(jìn)行調(diào)試。

Haytham雖然是一個(gè)大四本科生,但是已經(jīng)在SAP成都研究院Jerry所在團(tuán)隊(duì)實(shí)習(xí)將近十個(gè)月的時(shí)間了,最近三個(gè)月一直在SAP德國(guó)總部參與一個(gè)項(xiàng)目的開(kāi)發(fā)。

等Haytham回到成都后,會(huì)將自己這十個(gè)月的工作感悟,從一個(gè)SAP新人的視角給大家分享出來(lái),敬請(qǐng)期待。

Haytham之前寫(xiě)過(guò)的文章:

SAP成都研究院許聚龍:Hello, Coresystems!

Haytham寫(xiě)的這個(gè)nodejs應(yīng)用實(shí)際上是Github Webhook的一部分。我們?cè)诒镜剡M(jìn)行微服務(wù)nodejs開(kāi)發(fā),本地git客戶(hù)端推送代碼到遠(yuǎn)端github倉(cāng)庫(kù)。然后需要在AWS上手動(dòng)git pull把最新的代碼拉下來(lái),再用一個(gè)開(kāi)源工具pm2進(jìn)行微服務(wù)部署。Haytham寫(xiě)的這個(gè)nodejs應(yīng)用,能實(shí)現(xiàn)本地git推送完畢后一切后續(xù)流程的完全自動(dòng)化,節(jié)省了我們大量的部署時(shí)間。

下面就來(lái)對(duì)Haytham這個(gè)運(yùn)行在AWS上的nodejs應(yīng)用進(jìn)行遠(yuǎn)程調(diào)試。

1. 用node --inspect-brk在AWS上以調(diào)試模式啟動(dòng)應(yīng)用。

之后控制臺(tái)上的輸出表明有一個(gè)nodejs進(jìn)程以WebSocket協(xié)議在127.0.0.1:9229這個(gè)地址上監(jiān)聽(tīng)調(diào)試客戶(hù)端的連接。

2. 我在我的本地電腦上,用如下命令行將我本地電腦的端口9221映射到AWS調(diào)試進(jìn)程監(jiān)聽(tīng)的9229端口上:

ssh -i C:甥敳獲i042416.sshKOI.pem -L 9221:localhost:9229 ubuntu@ec2-us-east-2.compute.amazonaws.com

現(xiàn)在,本地電腦上Chrome瀏覽器地址欄chrome://inspect里指定監(jiān)聽(tīng)地址為localhost:9221,

通過(guò)第二步建立的SSH tunnel,

我就可以用本地電腦連接到AWS上的nodejs應(yīng)用并進(jìn)行調(diào)試了。

現(xiàn)在終于可以在Chrome開(kāi)發(fā)者工具里進(jìn)行愉快的調(diào)試了:

因?yàn)槲移綍r(shí)本地做nodejs開(kāi)發(fā)和調(diào)試時(shí),更喜歡用Visual Studio Code,所以下一步我準(zhǔn)備試試用Visual Studio Code進(jìn)行遠(yuǎn)程調(diào)試。

說(shuō)到Visual Studio Code,Jerry突然想起今天在網(wǎng)上看到的一個(gè)關(guān)于這個(gè)IDE的有意思的擴(kuò)展,名為"超越鼓勵(lì)師"。

Jerry試著在自己的Visual Studio Code擴(kuò)展安裝欄里搜索了一下,這個(gè)擴(kuò)展還真的可以下載。不過(guò)擴(kuò)展里出現(xiàn)的"楊超越",Jerry又孤陋寡聞了,咨詢(xún)了老婆后才知道她是誰(shuí)。

至于實(shí)際效果如何,Jerry不做評(píng)價(jià),歡迎Visual Studio Code愛(ài)好者自行下載體驗(yàn)。

最后,祝各位程序猿/程序媛們每天即使沒(méi)有程序員鼓勵(lì)師的陪伴,仍然可以愉快地編程。感謝閱讀。

總結(jié)

以上是生活随笔為你收集整理的跨网段远程调试vs_如何提高后台服务应用问题的排查效率?日志 VS 远程调试的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。