在代碼的指定位置中斷,使程序在此中斷。javascript
案例:html
(gdb) break sc_smartcontract_handler.cpp:45 Breakpoint 4 at 0x424d42: file sc_smartcontract_handler.cpp, line 45.
對斷點的相關操做java
捕捉點用來補捉程序運行時的一些事件。如:載入共享庫(動態連接庫)、C++的異常等。一般也是用來定位bug。編程
捕捉點的命令格式是:catch <event>,event能夠是下面的內容數組
能夠經過info watchpoints [n]命令查看當前觀察點信息函數
最經常使用的查看變量的方法是post
(gdb) print {變量名}ui
(gdb) print argc $1 = 1
若是打印數組,因爲默認的設置,可能打印的數組尾部部分沒有顯示,能夠經過以下的命令設置打印數組的最大長度url
(gdb) set print elements 300spa
雖然list已經很方便了, 但仍是不盡人意. 若是可以在運行的同時顯示代碼就行了, 答案是確定的.
使用以下命令啓動gdb: gdb -tui 項目名 或者在啓動gdb後, 輸入命令focus,如圖:
在gdb中,和調試步進相關的命令主要有以下幾條:
當程序被停住了,你須要作的第一件事就是查看程序是在哪裏停住的。當你的程序調用了一個函數,函數的地址,函數參數,函數內的局部變量都會被壓入「棧」(Stack)中。你能夠用bt命令來查看當前的棧中的信息。
你能夠定義你的斷點是否在全部的線程上,或是在某個特定的線程。GDB很容易幫你完成這一工做。
linespec指定了斷點設置在的源程序的行號。threadno指定了線程的ID,注意,這個ID是GDB分配的,你能夠經過"info threads"命令來查看正在運行程序中的線程信息。若是你不指定thread <threadno>則表示你的斷點設在全部線程上面。你還能夠爲某線程指定斷點條件。如:
(gdb) break frik.c:13 thread 28 if bartab > lim
當你的程序被GDB停住時,全部的運行線程都會被停住。這方便你你查看運行程序的整體狀況。而在你恢復程序運行時,全部的線程也會被恢復運行。那怕是主進程在被單步調試時。
查看當前程序棧的內容: x/10x $sp-->打印stack的前10個元素
查看當前程序棧的信息: info frame----list general info about the frame
查看當前程序棧的參數: info args---lists arguments to the function
查看當前程序棧的局部變量: info locals---list variables stored in the frame
查看當前寄存器的值:info registers(不包括浮點寄存器) info all-registers(包括浮點寄存器)
查看當前棧幀中的異常處理器:info catch(exception handlers)
參考博客