GDB常用命令參考
1.要在可執行文件中包含調試信息,需要在編譯時加入-g參數
gcc -g test.c -o test
2.啟動gdb調試程序
gdb test
3.查看gdb的幫助信息
help
4.查看源代碼(l)
list
5.設置斷點(b)
在某一行設置一個斷點:break 40
在某一個函數入口處設置一個斷點: break my_func
6.開始運行程序(r)
run
7.打印變量值(p)
print my_var
8.將局部變量信息全部輸出(info)
info locals
9.人為修改變量的值(set)
set my_var=”hello,world”
10.輸出斷點信息(info)
info break
11.單條語句執行(n)
next
12.繼續往下執行程序(c)
continue (c)
13.查看函數堆棧(bt)
backtrace
14.執行shell命令(shell)
shell cmd
15.設定程序運行時的參數(set args)
set args myarg1 myarg2 myarg3
16.查看設置好的參數
show args
17.設置程序的運行路徑(path)
path dir
18.查看程序的運行路徑(show)
show path
19.設置環境變量(set)
set env env_var = value
20.查看環境變量(show)
show env env_var
21.查看程序當前的狀態
info program
22.刪除斷點(delete)
delete 斷點號
23.暫停斷點(disable)
disable 斷點號
24.單步調試(step)
注意與next的區別,step命令在遇到函數調用時會進入函數內部
25.設置觀察點(watch)
watch expr (為表達式(變量)expr設置一個觀察點。一量表達式值有變化時,馬上停住程序)
26.查看觀察點(info)
info watchpoints
27.設置捕捉點(catch)
catch event (當event發生時,停住程序)
28.調試已運行的程序
兩種方法:
1、在UNIX下用ps查看正在運行的程序的PID(進程ID),然后用gdb <program> PID格式掛接正在運行的程序。
2、先用gdb <program>關聯上源代碼,并進行gdb,在gdb中用attach命令來掛接進程的PID。并用detach來取消掛接的進程。
29.多線程調試
- info thread 查看當前進程的線程。
- thread <ID> 切換調試的線程為指定ID的線程。
- break file.c:100 thread all 在file.c文件第100行處為所有經過這里的線程設置斷點。
- set scheduler-locking off|on|step,這個是問得最多的。在使用step或者continue命令調試當前被調試線程的時候,其他線程也是同時執行的,怎么只讓被調試程序執行呢?通過這個命令就可以實現這個需求。
- off 不鎖定任何線程,也就是所有線程都執行,這是默認值。
- on 只有當前被調試程序會執行。
- step 在單步的時候,除了next過一個函數的情況(熟悉情況的人可能知道,這其實是一個設置斷點然后continue的行為)以外,只有當前線程會執行。 </ul> </li> </ul>
- info macro – 你可以查看這個宏在哪些文件里被引用了,以及宏定義是什么樣的。
- macro – 你可以查看宏展開的樣子。 </ul>
30.調試宏
在GCC編譯程序的時候,加上-ggdb3參數,這樣,你就可以調試宏了。
另外,你可以使用下述的GDB的宏調試命令 來查看相關的宏。
31.條件斷點
條件斷點是語法是:break [where] if [condition],這種斷點真是非常管用。尤其是在一個循環或遞歸中,或是要監視某個變量。注意,這個設置是在GDB中的,只不過每經過那個斷點時GDB會幫你檢查一下條件是否滿足。
32.自動化調試(command)
自動化調試,簡單的理解就是把一組gdb命令打包。示例如下:
(gdb) break func Breakpoint 1 at 0x3475678: file test.c, line 12. (gdb) command 1 Type commands for when breakpoint 1 is hit, one per line. End with a line saying just "end". >print arg1 >print arg2 >print arg3 >end (gdb)
當我們的斷點到達時,自動執行command中的三個命令,把func的三個參數值打出來。==============================OVER=====================================
來自:http://www.cricode.com/3609.html
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!