http://sourceware.org/gdb/current/onlinedocs/gdb/
斷點設置
gdb斷點分類:
以設置斷點的命令分類:
breakpoint
可以根據行號、函數、條件生成斷點。
watchpoint
監測變量或者表達式的值發生變化時產生斷點。
catchpoint
監測信號的產生。例如c++的throw,或者加載庫的時候。
gdb中的變量從1開始標號,不同的斷點采用變量標號同一管理,可以 用enable、disable等命令管理,同時支持斷點范圍的操作,比如有些命令接受斷點范圍作為參數。
例如:disable 5-8
1、break及break變種詳解:
相關命令有break,tbreak,rbreak,hbreak,thbreak,后兩種是基於硬件的,先不介紹。
>>break 與 tbeak
break,tbreak可以根據行號、函數、條件生成斷點。tbreak設置方法與break相同,只不過tbreak只在斷點停一次,過后會自動將斷點刪除,break需要手動控制斷點的刪除和使能。
break 可帶如下參數:
linenum 本地行號,即list命令可見的行號
filename:linenum 制定個文件的行號
function 函數,可以是自定義函數也可是庫函數,如open
filename:function 制定文件中的函數
condtion 條件
*address 地址,可是函數,變量的地址,此地址可以通過info add命令得到。
例如:
break 10
break test.c:10
break main
break test.c:main
break system
break open
如果想在指定的地址設置斷點,比如在main函數的地址出設斷點。
可用info add main 獲得main的地址如0x80484624,然后用break *0x80484624.
條件斷點就是在如上述指定斷點的同時指定進入斷點的條件。
例如:(假如有int 類型變量 index)
break 10 if index == 3
tbreak 12 if index == 5
>>rbreak
rbreak 可以跟一個規則表達式。rbreak + 表達式的用法與grep + 表達式相似。即在所有與表達式匹配的函數入口都設置斷點。
rbreak list_* 即在所有以 list_ 為開頭字符的函數地方都設置斷點。
rbreak ^list_ 功能與上同。
>>查看斷點信息
info break [break num ]
info break 可列出所有斷點信息,info break 后也可設置要查看的break num如:
info break 1 列出斷點號是1的斷點信息
Num Type Disp Enb Address What
1 breakpoint keep y <MULTIPLE>
stop only if i==1
breakpoint already hit 1 time
1.1 y 0x080486a2 in void foo<int>() at t.cc:8
1.2 y 0x080486ca in void foo<double>() at t.cc:8