歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

gdb常用命令

本機調試
帶參數啟動
gdb --args ./program arg1 arg2 arg3
 
在main()處斷點
break main
 
啟動以後設置參數運行
run arg1 arg2 arg3
 
取消參數開始運行
set args
run
 
設置參數
set args arg1 arg2 arg3
run
 
分析core文件
gdb ./test ./test.core
gdb --core=./test.core ./test
gdb ./test 2640
gdb --pid=2640 ./test
 
 
遠程調試
目標機器
gdbserver 127.0.0.1:1234 ./test
主機:
target remote 127.0.0.1:1234
break main
run
 
調試控制命令:
step 單步,參數N表示單步幾次,一般可以用作步入到 子函數 調用中去。(vc++的F11,windbg的t)
stepi 指令集的step,一般在匯編窗口調用。
 
next 類似單步,只不過把子函數調用當做一個指令預先執行掉,不跟進去。(vc++的F10,windbg的p)
nexti 指令集的next,一般在匯編窗口調用。
 
until 執行到比當前行號大的一行為止。用作步出循環體,這個時候剛好在循環體的最後一行,可以執行這個步出循環。
 
finish 執行到當前棧即將返回的位置。用於將當前函數執行完畢返回。(vc++的shift+F11,windbg的pt,tt,wt)
 
advance 推進到某個位置advance 27表示推進到27行,(vc++的ctrl+F11, windbg的pa, "step to address")
 
jump 跳到某個指令直接執行, jump 27 直接跳到27行開始執行,最好在27行之後某個位置斷點一個看看。(windgb的r eip=0x41000100)
 
 
斷點指令:
break main 函數名斷點
break test.c : 27 文件的27行斷點
break *0x00000000004005f0 在匯編指令的地址處斷點, 前面有一個星號
硬件數據斷點
awatch 訪問斷點access watch; awatch i, 當i被訪問的時候,程序斷開。(類似於windbg的ba斷點)
watch   寫入數據斷點,watch i 當i的值被修改的時候,斷開。
rwatch 讀取斷點, 當i的值被讀取的時候斷開。
hbreak 硬件指令斷點, hbreak *0x0000000000400606 在這個地址設置硬件斷點
 
條件斷點:
在循環體的11行斷點,只有循環計數器是20的時候斷開。
www.2cto.com
(gdb) break 11 if i=20 
Breakpoint 2 at 0x4005c9: file test.cxx, line 11. 
(gdb) info breaks 
Undefined info command: "breaks".  Try "help info". 
(gdb) info break 
Num     Type           Disp Enb Address            What 
1       breakpoint     keep y   0x00000000004005c0 in foo() at test.cxx:9 
        breakpoint already hit 1 time 
2       breakpoint     keep y   0x00000000004005c9 in foo() at test.cxx:11 
        stop only if i=20 
(gdb) c 
Continuing. 

 
Breakpoint 2, foo () at test.cxx:11 
11             printf("%d\n",i); 
(gdb) p i 
$1 = 20 
 
數據查看命令:
print 打印變量的值,print i, 查看變量i當前的值。
x 內存檢查, Examine the memory, x /nfs n=count of unit to examine. f=format,(x=hex; d=decimal, c=char); s=sizeof of unit
display 每次gdb獲得控制的時候,打印變量的值,display i; 在單步的時候,每次查看i的變化;
 
 
棧操作指令:
info stack 查看當前線程棧的情況,看函數調用鏈。類似於bt;
backtrace, 棧回溯
info frame 查看當前函數幀的信息。
up 往調用鏈的上游移動,看看caller是誰。
down 往調用鏈的下游移動,看看callee是誰。
frame 2 移動到第二個幀(count from callee->caller)
return 從選定棧執行返回到caller, 和finish類似的功能, 很好的一個功能哦.
Copyright © Linux教程網 All Rights Reserved