程序中除了一目瞭然的Bug之外都需要一定的調試手段來分析到底錯在哪。到目前為止我們的調試手段只有一種:根據程序執行時的出錯現象假設錯誤原因,然後在代碼中適當的位置插入printf
,執行程序並分析打印結果,如果結果和預期的一樣,就基本上證明了自己假設的錯誤原因,就可以動手修正Bug了,如果結果和預期的不一樣,就根據結果做進一步的假設和分析。本章我們介紹一種很強大的調試工具gdb
,可以完全操控程序的運行,使得程序就像你手裡的玩具一樣,叫它走就走,叫它停就停,並且隨時可以查看程序中所有的內部狀態,比如各變數的值、傳給函數的參數、當前執行的代碼行等。掌握了gdb
的用法之後,調試手段就更加豐富了。但要注意,即使調試手段豐富了,調試的基本思想仍然是“分析現象->假設錯誤原因->產生新的現象去驗證假設”這樣一個循環,根據現象如何假設錯誤原因,以及如何設計新的現象去驗證假設,這都需要非常嚴密的分析和思考,如果因為手裡有了強大的工具就濫用而忽略了分析過程,往往會治標不治本地修正Bug,導致一個錯誤現象消失了但Bug仍然存在,甚至是把程序越改越錯。本章通過初學者易犯的幾個錯誤實例來講解如何使用gdb
調試程序,在每個實例後面總結一部分常用的gdb
命令。