在linux中還有一個更受你們歡迎的調試工具:GDB。GDB是一個由GNU開源組織發佈的、UNIX/LINUX操做系統下的、基於命令行的、功能強大的程序調試工具。能夠用來調試C,C++程序。linux
GDB功能強大,調試命令也有不少,可是對於普通程序調試中常常使用的命令並很少,以下表所示:ide
經常使用的指令:函數
例子程序以下所示:工具
#include <stdio.h> int getSum(int num1,int num2); int main(int argc, char *argv[]) { int num1 = 20; int 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); }
第一步:spa
對源程序進行編譯,加上-g選項,使其能夠進行調試。其結果是生成可執行文件test_gdb,而且能夠對其進行gdb調試(對於該命令的詳細解釋,能夠查看gcc命令)操作系統
第二步:.net
進入gdb調試:命令行
如上圖最後一行所示,表明進入gdb調試,等待用戶命令輸入。3d
第三步:調試
加載進行調試的可執行文件,方便進行調試,以及源程序的顯示。命令以下:
顯示加載成功。
第四步:
(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