您好,登錄后才能下訂單哦!
小編給大家分享一下GDB如何調(diào)試,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
Gcc編譯過(guò)程主要的4個(gè)階段:
l 預(yù)處理階段,完成宏定義和include文件展開等工作;(.i)
l 根據(jù)編譯參數(shù)進(jìn)行不同程度的優(yōu)化,編譯成匯編代碼(.s.S)
l 用匯編器把匯編代碼進(jìn)一步生成目標(biāo)代碼(.o)
l 用連接器把生成的目標(biāo)代碼和系統(tǒng)或用戶提供的庫(kù)連接起來(lái),生成可執(zhí)行文件
格式:
l gcc -E test.c//預(yù)處理階段
l Gcc -S test.c//編譯階段
l Gcc -c test.c//匯編階段
l Gcc -o test test.c//鏈接階段
Gdb的功能:
l 設(shè)置斷點(diǎn)
l 監(jiān)視程序變量的值
l 程序的單步執(zhí)行
l 顯示、修改變量的值
l 顯示、修改寄存器
l 查看程序的堆棧情況
l 遠(yuǎn)程調(diào)試
Gdb調(diào)試過(guò)程:
1、程序經(jīng)過(guò)預(yù)處理后,即進(jìn)入編譯階段,進(jìn)入編譯階段,首先聲明編譯:
2、格式:gcc-o test test.c -g
3、進(jìn)入編譯:gdb test
4、顯示需要編譯調(diào)試的源程序:l(list)//list filename
5、設(shè)置斷點(diǎn):b(break)行號(hào)
6、查看設(shè)置的斷點(diǎn):info b
7、運(yùn)行調(diào)試程序:run
8、跳到下一個(gè)斷點(diǎn):c(continue)
9、單步運(yùn)行的話使用:n(next)/s(step into)跳到函數(shù)體 //區(qū)別在與:next執(zhí)行函數(shù)體,而step不執(zhí)行函數(shù)體
10、調(diào)試過(guò)程中查看某個(gè)變量的變化:print i (每次都要手動(dòng)設(shè)置)//display i(設(shè)置一次一直尾隨,直到用“undisplay 變量標(biāo)號(hào)” 停止)
11、退出當(dāng)前的調(diào)試使用finish 跳出函數(shù)
12、清楚斷點(diǎn) clear 行號(hào)
13、Delete 斷點(diǎn)信息序號(hào)// 刪除所有斷點(diǎn)或設(shè)置的要?jiǎng)h除的斷點(diǎn)
14、退出調(diào)試 q
15、b num if i==20 設(shè)置斷點(diǎn)的觸發(fā)條件
16、condition num i==50 改變斷點(diǎn)的觸發(fā)條件
17、GDB中源代碼查看命令
list /l 行號(hào)或函數(shù)名 //查看指定位置代碼
list <linenum> //顯示程序第linenum行的周圍的源程序
list <function> //顯示函數(shù)名為function的函數(shù)的源程序
list // 顯示當(dāng)前行后面的源程序
list <filename:funtion> //顯示哪個(gè)文件中的哪個(gè)函數(shù)的源程序
eg: list src/fun1.c:fun1
list <filename:linenum> //哪個(gè)文件的哪一行周圍的源程序
eg:list src/fun1.c:1
看完了這篇文章,相信你對(duì)“GDB如何調(diào)試”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。