用了好久的GCC/G++ 卻一直都沒用過GDB調試過程式,有時程式不是非常大,一般有錯,直接看編譯器編譯結果就幾乎相同知道錯在哪兒了,或者使用codeblocks單步調試,甚至回到windows以下調試,可是總是不太友善,是以有必要看一下GDB調試方法和基本步驟.
以下是一個簡單的示範:
首先建立一個有錯誤的代碼,例如以下:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5yMldzY2AzN3QjN0IzM4MTYzkDZ1MTZiJzNxMDZyczMi9CXxMzLcdDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL1M3Lc9CX6MHc0RHaiojIsJye.png)
這個程式非常easy,目的是接受使用者的輸入,并将使用者的輸入回應輸出來.
可是這個程式的第17行有個錯誤,使用了未初始化的字元指針name,是以編譯執行後會出現段錯誤,例如以下:
以下利用GDB 工具查找該程式中的出現的問題,過程例如以下:
FIR:
執行gdb bug指令,裝入上面的可執行檔案:
使用list指令(或者l)指令檢視代碼:
使用run指令:
輸出三行結果:
1:出現段錯誤
2:提示錯誤的位置
使用where指令檢視程式出錯位置:
以上資訊說明gets函數出錯,從代碼能夠看出,唯一可能出錯的是name變量,是以通過print指令檢視name變量:
由此可知,出錯的原因是使用了未初始化的變量name.
退出gdb.
簡單的示範了一下.詳細的其它的調試手段見興許.