您好,登錄后才能下訂單哦!
前言
gdb是linux下非常好用的一個調(diào)試工具,雖然它是命令行模式的調(diào)試工具,但是它的功能強大到你無法想象,這里簡單介紹下gdb的使用方法,需要的朋友們下面來一起看看詳細(xì)的介紹吧。
斷點
在代碼的指定位置中斷,使程序在此中斷。
案例:
(gdb) break sc_smartcontract_handler.cpp:45 Breakpoint 4 at 0x424d42: file sc_smartcontract_handler.cpp, line 45.
對斷點的相關(guān)操作
觀察點
捕捉點用來補捉程序運行時的一些事件。如:載入共享庫(動態(tài)鏈接庫)、C++的異常等。通常也是用來定位bug。
捕捉點的命令格式是:catch <event>,event可以是下面的內(nèi)容
可以通過info watchpoints [n]命令查看當(dāng)前觀察點信息
查看變量
最常用的查看變量的方法是
(gdb) print {變量名}
(gdb) print argc $1 = 1
如果打印數(shù)組,由于默認(rèn)的設(shè)置,可能打印的數(shù)組尾部部分沒有顯示,可以通過如下的命令設(shè)置打印數(shù)組的最大長度
(gdb) set print elements 300
調(diào)試中查看代碼
雖然list已經(jīng)很方便了, 但還是不盡人意. 如果能夠在運行的同時顯示代碼就好了, 答案是肯定的.
使用如下命令啟動gdb: gdb -tui 項目名 或者在啟動gdb后, 輸入命令focus,如圖:
恢復(fù)程序運行和單步調(diào)試
在gdb中,和調(diào)試步進(jìn)相關(guān)的命令主要有如下幾條:
在特定線程中中斷
你可以定義你的斷點是否在所有的線程上,或是在某個特定的線程。GDB很容易幫你完成這一工作。
linespec指定了斷點設(shè)置在的源程序的行號。threadno指定了線程的ID,注意,這個ID是GDB分配的,你可以通過"info threads"命令來查看正在運行程序中的線程信息。如果你不指定thread <threadno>則表示你的斷點設(shè)在所有線程上面。你還可以為某線程指定斷點條件。如:
(gdb) break frik.c:13 thread 28 if bartab > lim
當(dāng)你的程序被GDB停住時,所有的運行線程都會被停住。這方便你你查看運行程序的總體情況。而在你恢復(fù)程序運行時,所有的線程也會被恢復(fù)運行。那怕是主進(jìn)程在被單步調(diào)試時。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對億速云的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。