Ubuntu 16.04下GDB調試
在linux中還有一個更受大家歡迎的調試工具:GDB。GDB是一個由GNU開源組織發布的、UNIX/LINUX操作系統下的、基於命令行的、功能強大的程序調試工具。可以用來調試C,C++程序。
GDB功能強大,調試命令也有很多,但是對於普通程序調試中經常使用的命令並不多,如下表所示:
常用的指令:
例子程序如下所示:
#include <stdio.h> int getSum(int num1,int num2); int main(int argc, char *argv[]) { int num1 = 20;View Codeint num2 = 30; int sum = 0; num1 = num1 - 10; sum = getSum(num1,num2); printf("The sum is %d\n", sum); return 1; } int getSum(int num1,int num2) { printf("The numbers are %d and %d\n", num1,num2); return (num1 + num2); }
第一步:
對源程序進行編譯,加上-g選項,使其可以進行調試。其結果是生成可執行文件test_gdb,並且可以對其進行gdb調試(對於該命令的詳細解釋,可以查看gcc命令)
第二步:
進入gdb調試:
如上圖最後一行所示,代表進入gdb調試,等待用戶命令輸入。
第三步:
加載進行調試的可執行文件,方便進行調試,以及源程序的顯示。命令如下:
顯示加載成功。
第四步:
(1)如果在設置斷點之前,輸入r
程序正常運行,打印輸出結果,並正常退出。
(1)在運行之前,設置斷點,為了確定設置斷點的位置(行號)可以使用list(l)命令,顯示出程序的內容,從而方便的設置斷點
(2)設置斷點
第一個斷點設置在main函數的入口處,第二,三個斷點為普通斷點,第四個斷點設置在函數調用的入口處,第5個斷點為條件斷點。
(3)開始調試運行
輸入r開始運行,在第一個斷點處(即main函數入口)停止運行。
此時打印輸出num1的值,顯示的並不是20,而是一個隨機值,因為此時還沒有完成初始化操作,如下所示:
輸入n執行下一步,此時再次打印輸出num1,即可完成初始化。
輸入c,執行到第二個斷點處停止運行。如下圖所示
當程序執行到getSum函數的調用處時,執行s,進入到getSum函數內部,繼續調試執行
一直進行單步調試,直到函數結束運行,退出函數的調用
在getSum函數結束之前以及結束之後分別打印輸出sum值:
很明顯,函數getSum完成計算num1與num2的和之後並對sum賦值。
最後程序結束運行.
每日一句:善日者強,善時者霸 --荀子
參考文檔:https://blog.csdn.net/longshen1990/article/details/47778269
Ubuntu 16.04下GDB調試