
迪歐米迪斯·斯賓奈里斯
本書所要講解的調試知識,包括與調試有關的策略、工具及方法。我們當前在開發並運作一款複雜的計算系統時,可能會遇到各種問題,而這些調試知識,則使大家能夠應對這些問題。過去我們所說的調試,主要是指檢測並修復程序錯誤,而當前卻很少有哪個程序會孤立地運作,即便是一個很小的程序,也會與外部的程序庫相鏈接(通常是動態鏈接)。更爲複雜的程序會運行在應用程序服務器中,會調用Web服務,會使用關係型數據庫及NoSQL數據庫,會從目錄服務器上獲取數據,會運行外部的程序,會利用其他的中間件,也會納入很多第三方的軟件包。於是,要想令整個系統及服務正常地運作,就必須確保其中的組件不會發生故障,這些組件可能是由公司內部人員所開發的,也可能是由第三方所提供的,它們所在的主機或許分佈在全球各地。爲了應對這種局面,軟件開發行業開始重視DevOps規程,這套規程旨在同時強調開發者和其他IT專業人員所應擔負的職責。與之類似,本書想使讀者在面對故障時也能夠具備這樣一種全面的觀念,因爲在面對一些極爲困難的問題時,我們通常無法立刻判斷出該問題到底是由哪一個軟件組件所引發的。
要相信自己可以定位並解決bug,可能是這篇文章最重要的內容了。 Agent時代,調試一個問題的速度,幾乎完全取決於你的表達能力,調試技術本身不那麼重要。 張銀奎老師的軟件調試的著作,本來一直拖着沒讀,沒想到現在已經越來越不需要了,果然學的夠慢,就不用學了麼。😅
作者做了充分地系統思考和總結,端到端地介紹了有關調試方方面面的知識。 也許有一天,大家都能寫出好代碼,軟件世界沒有bug,調試成爲上古神器。
2024.No84: 24年第39本技術書。適合有幾年工作經驗,值得反覆閱讀的技術書籍,能學習到很多調試技巧。Java開發可能是最簡單,IDEA調試能力異常強大。能瞭解到很多其他語言裏的概念和工具。Shell、DTrace、Git、乃至Wireshark等工具還要持續深入學習並實踐。
作者系統地列舉了下排查bug的思路,以及一些常用的工具,值得一讀。
作者分享了很多程序員研發技巧,值得一讀。
依舊還是看每本書,都能想到程博。書裏介紹的大部分方法程博都教過,或者從負面吐槽過我(比如問我爲什麼能忍受每次重現要做那麼多事,明明通過腳本或者配置就可以省去很多時間之類的)。也有一些之前沒有接觸過的方法,或者不是第一反應會用到的。 對於書裏介紹部分的工具,之前工作中也使用過一些,不過還是少數。還有些像gdbinit strace perf在綠導師的操作系統課裏也都有提到,希望後面有時間可以再詳細研究一下提到的工具。 總體來說,我覺得還是值得推薦的,畢竟我覺得是值得我多讀幾遍的。
積累書中提到的對工作有影響的可實踐小方法: 1.把你的代碼講給“小黃鴨”聽:當你寫代碼的時候和當你嘗試把代碼邏輯解讀給小黃鴨聽的時候,大腦的思考區域是不同的,很多時候問題在轉念一想的過程中就會暴露; 2.多利用現有的工具:代碼靜態掃描工具、即時編譯小插件、apache的多線程圖形化界面工具都能幫助程序員可視化代碼的調用邏輯和過程; 3.在調試的時候儘可能視覺區域擴大點:自己以前的習慣就不是很好,視覺區域較小會導致思考斷斷續續,不夠連貫絲滑,儘可能把代碼邏輯、數據庫交互、第三方調用這些過程都能在兩個屏幕上完全呈現; 4.利用好codeReview:把代碼審覈當成是一種工作的習慣,而不是在心理上覺得是一種“對人的針對”,能夠儘早發現問題,問題被解決的成本就越低; 5.關注diff對比:diff調用過程中差異點,如果是代碼變化了就diff代碼,如果代碼沒變化就diff入參、diff數據庫交互、diff第三方交互; 6.用二分查找定位問題:如果在一坨代碼中找一個bug,就用二分查找,不斷縮小問題的範圍,藉助斷言、條件判斷、註銷邏輯等能提高二分查找揪bug的速度。
雖然這本書豆瓣評分只有6.5分,但是其實這本書真心輸在名字取的不好,這本書應該改名叫Debugging Crash Course,同樣的內容,評分肯定能高不少。這本書在嘗試着把所有和調試相關的思路都梳理一邊,所以有大量的對很多人來說可能都已經變成常識的內容,而且所有的內容都是點到即止,比如工具就是說幾個名字,然後挑一個舉一個最簡單的例子,這些東西對調試老手而言幾乎沒有用處,但是對於新手而言簡直就是一本調試指南!我覺得四顆星還是對得起的。
作者經驗豐富,列舉了不少調試的方法和乾貨,學到了一些以前不知道的工具。
推薦所有工程師閱讀!這不是一本單單教你如何調試代碼的書,而是討論了整個軟件項目週期中如何保障和提升工程質量的最佳實踐!