1,啟動程式
2,常用命令
3,設定斷點
設定條件斷點
設定臨時斷點:tbreak args
設定乙個只中斷一次的斷點。args 和break 命令裡的引數一樣,斷點設定也一樣,但斷點在第一次程式中斷後自動 刪除。
用正規表示式設定斷電:rbreak regex
在所有匹配正規表示式regex 的函式上設定斷點。這個命令會在所有匹配的函式上設定無條件的斷點,也列印設定的斷點列表
正規表示式的語法是標準的,就如grep
工具用的一樣。注意,和shell用的不一樣,例如foo匹配開頭是fo,接下來有0 或者多個o 的函式。在你的正規表示式的開頭和結尾有個隱含的.,所以要想只匹配foo 開頭的函式,用^foo.在除錯c++程式,在非特定類的成員函式的過載函式的設定斷點上,rbreak 很有用。
直接執行rbreak:在所有函式上設定斷點。
4,檢視原始檔
5,檢視設定了哪些斷點
6,刪除斷點
例子:先用info b檢視有哪些斷點,注意num列,如果想刪除【src/add.c:4】處的斷點,就執行【d 2】
(gdb) info b
num type disp enb address what
2 breakpoint keep y 0x0000555555554667 in add at src/add.c:4
3 breakpoint keep y 0x000055555555468b in main at main.c:5
刪除3號(src/add.c:4處的)斷點:
(gdb) d 2
再用info b看看,發現2號斷點沒有了。
(gdb) info b
num type disp enb address what
3 breakpoint keep y 0x000055555555468b in main at main.c:5
7,檢視變數的值和變數的型別
8,設定程式的啟動引數
9,修改變數的值
10,檢視幫助
11,每次單步執行都想觀察變數的值,請使用【display】,不想看了,就用【undisplay】加num的號碼
12,除錯core檔案,當出現:段錯誤(核心已轉儲)[segmentation fault (core dumped)]時,可以使用【gdb 程式名 core檔名】後,就能直接看到在哪行出錯,如果沒有顯示,可以輸入【where】,也可以定位到哪行出錯。
但是core檔案預設是不被生成的,如何讓它生成呢,
程式第一次執行出了[segmentation fault]錯誤後,就會在當前目錄生成乙個名字為【core】的檔案,問題來了,如果又執行了一次,又出了[segmentation fault]錯誤後,又會生成乙個【core】,這次的【core】就會覆蓋掉上次的【core】,所以就需要設定如何生成【core】的檔名,達到每次生成的【core】的名字都不相同,就不會覆蓋掉上次的core檔案了。
選項如下:
%p:insert pid into filename 新增pid
%u:insert current uid into filename 新增當前的uid
%g:insert current gid into filename 新增當前的gid
%s:insert signal that caused the coredump into the filename 新增導致產生core的訊號
%t:insert unix time that the coredump occurred into filename 新增core檔案生成時間的unix時間
%e:insert coredumping executable name into filename 新增程式名
修改辦法:
gdb常用命令
gnu的偵錯程式稱為gdb,是乙個互動式的程式,工作在字元模式。其常用命令如下 break num 在指定的行上設定斷點 break 1 bt 顯示函式的呼叫順序 clear 刪除斷點 clear test.c 10 display expr 每次程式停止後顯示表示式的值 printf expr顯示...
GDB常用命令
1 執行 run2 單步執行 step next finish 一直執行到函式返回 until 執行到某一行 3 斷點 break args break 12 break 10 hbreak args 硬體輔助斷點 thbreak args rbreak args info breakpoints ...
gdb 常用命令
呼叫gdb編譯需要在cc後面加 g引數再加 o root redhat home gdb 除錯檔案 啟動gdb gdb l 字母l 從第一行開始列出原始碼 gdb break n 在第n行處設定斷點 gdb break func 在函式func 的入口處設定斷點 gdb info break 檢視斷...