Linux中的C/C++語言調(diào)試工具 GDB
GDB(GNU Debugger)是一個功能強大的調(diào)試器,用于調(diào)試和分析程序的執(zhí)行過程。它是GNU項目的一部分,可以在多個操作系統(tǒng)上使用,包括Linux、Unix和Windows。
GDB主要用于調(diào)試編譯后的可執(zhí)行文件,它可以幫助程序開發(fā)人員識別和修復代碼中的錯誤、追蹤程序的執(zhí)行流程、觀察和修改程序的狀態(tài),以及分析程序崩潰時的堆棧跟蹤信息。
Linux下最常用的調(diào)試工具就是GDB。
1.安裝GDB
sudo apt-get install gdb
2.使用GDB
2.1啟動與退出
啟動
$gdb
使用quit命令(簡寫成q)退出
$(gdb)q
2.2裝入調(diào)試程序
首先寫一個C語言程序
/*a.c*/
#include<stdio.h>
void show(int i){
printf("this is %d\n",i);
}
int main(){
int i=0;
int j=9;
for(i=1;i<=j;i++)
show(i);
return 0;
}
對上面的代碼進行編譯連接
gcc -g a.c -o a
在調(diào)試程序之前必須先得在gdb中裝入調(diào)試程序,根據(jù)裝入調(diào)試程序的時間分為兩種:
-
在啟動gdb時,進行裝入:
$gdb a
-
在啟動gdb之后,進行裝入:
(gdb) file a
2.3列出源代碼
程序轉(zhuǎn)入gdb之后,可以使用list命令(可以簡寫成l)將源碼列出。
(gdb) list
默認情況下只會顯示前10行的代碼,如果程序代碼量過多,可以繼續(xù)使用list命令顯示后面的代碼。
2.4執(zhí)行程序
執(zhí)行命令時run(可以簡寫成r)。可以在run命令之后可以加入執(zhí)行參數(shù)來執(zhí)行相關的操作。
(gdb) run
目前沒有添加斷點,所以程序直接輸出了運行結(jié)果。若添加了斷點,則會在斷點的位置進行停止。
3.設置與管理斷點
3.1 設置斷點
設置斷點的命令是 break(可以簡寫成b)。一般設置形式:
break 行號
設置完斷點以后,利用run命令執(zhí)行程序。
-
利用break設置斷點時,也可以添加條件進行判斷
break 行號 if語句
當程序在斷點處停下來了,可以使用continue命令(可以簡寫成c),繼續(xù)執(zhí)行程序。
(gdb) continue
3.2查看斷點信息
加入斷點之后,可以利用 info break命令進行查看設置的斷點信息??梢钥吹皆跀帱c的編號、類型、地址等信息。
(gdb) info break
3.3刪除斷點信息
利用delete命令(可以簡寫成d)進行刪除之前設置的斷點。
delete 斷點編號
刪除指定范圍內(nèi)的斷點也可以使用
delete 起始斷點編號-終點斷點編號
也可以刪除指定行上的斷點,利用clear命令進行刪除
(gdb) clear 行號
3.4設置觀察點
觀察點也稱數(shù)據(jù)斷點,顧名思義就是用來觀察某個變量或者表達式的變化,如果有變化,則暫停程序的運行,這在調(diào)試程序中時非常常見的。設置觀察點的命令為 watch,后面跟變量過著表達式。·
(gdb) watch 變量或表達式
可以利用info watchpoints命令來查看當前設置的所有觀察點。
可以使用delete命令來刪除指定的觀察點。
4.顯示數(shù)據(jù)和修改變量值
4.1顯示變量或表達式的值
在調(diào)試程序的過程中,查看變量或則表達式的值是一個有效的方法。
在GDB中,可以用print命令(可以簡寫成p)來顯示。
(gdb) print 變量或表達式
4.2 自動顯示變量或表達式的值
若我們需要持續(xù)性觀察一個變量或表達式的值,可以使用display命令,設置為自動顯示。
(gdb) dispaly 變量
4.3修改變量的值
在調(diào)試程序中,我們可以通過修改某一個變量的值來驗證代碼的準確性。
set命令
(gdb) set 變量=值
5.執(zhí)行命令和調(diào)用函數(shù)
為了方便后面的演示,現(xiàn)在新建一個b.c代碼文件。
/*b.c*/
#include<stdio.h>
void show(){
printf("1+2+3= ");
}
int main(){
int i=0;
int sum=0;
for(i;i<=3;i++)
sum+=i;
show();
printf("%d\n",sum);
return 0;
}
編譯成可執(zhí)行文件,并載入gdb中,方便后續(xù)演示。
$gcc -g b.c -o b
$gdb b
5.1單步執(zhí)行
單步執(zhí)行就是一步一步跟蹤程序的執(zhí)行的流程,根據(jù)變量的值,找到錯誤的原因。這是在程序調(diào)用中的常見的操作。
GDB中可以使用step(可以簡寫成s)或next(可以簡寫成n)來單步執(zhí)行程序。
step命令可以跟蹤進入函數(shù)內(nèi)部;next命令會將函數(shù)看作一條語句,不進入函數(shù)內(nèi)部。
5.2退出被調(diào)用的函數(shù)
當利用step命令進入函數(shù)內(nèi)部時,如果需要忽略剩下的函數(shù)語句,并繼續(xù)向下執(zhí)行,可以執(zhí)行return命令跳出函數(shù),
return命令后面可以跟變量或表達式。
6.其他
6.1幫助手冊
GDB中設置了幫助手冊,不清楚的命令可以利用help來獲取幫助。
6.2 查看堆棧信息
利用backtrack(可以簡寫成bt)和frame(可以簡寫f)命令查看棧的信息。
6.3 查看程序的匯編代碼
可以利用disassemble命令來顯示程序的匯編代碼。文章來源:http://www.zghlxwxcb.cn/news/detail-477822.html
void show(){
printf("1+2+3= ");
}
文章來源地址http://www.zghlxwxcb.cn/news/detail-477822.html
到了這里,關于Linux中的C/C++語言調(diào)試工具 GDB的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!