GDB调试:观察点(数据断点)【GDB调试】
- 觀察點(diǎn)
- 觀察點(diǎn)類型
- Hardware watchpoint
- Software watchpoint
- watch 寫觀察點(diǎn)
- 值被改變
- 滿足表達(dá)式條件
- 給特定運(yùn)行的線程加 watch
- 查看運(yùn)行的線程
- 為運(yùn)行的線程設(shè)置 watchpoint
- rwatch 讀觀察點(diǎn)
- awatch 讀寫觀察點(diǎn)
- info watch 查看觀察點(diǎn)
- delete 刪除觀察點(diǎn)
- disable 禁用觀察點(diǎn)
- enable 啟用觀察點(diǎn)
觀察點(diǎn)
觀察點(diǎn)是一個(gè)特殊的斷點(diǎn),當(dāng)表達(dá)式的值發(fā)生改變時(shí),進(jìn)行終端。
表達(dá)式可以使一個(gè)變量的值,也可以包含由運(yùn)算符組合的一個(gè)或多個(gè)變量的值。
觀察點(diǎn)類型
Hardware watchpoint
通過硬件方式。
不影響程序的執(zhí)行。
不影響程序執(zhí)行的性能。
大多數(shù)X86系統(tǒng)都使用 Hardware watchpoint。
Software watchpoint
通過軟件方式。
影響程序性能。(慢到幾倍甚至十幾倍)
例如:a + b
watch 寫觀察點(diǎn)
值被改變
當(dāng)變量的值發(fā)生改變并被寫時(shí),觸發(fā)斷點(diǎn)。
命令:(gdb) watch [變量名]
例如:
(gdb) watch tmp Hardware watchpoint 1: tmp滿足表達(dá)式條件
觸發(fā)中斷條件:
①:表達(dá)式中的值被改變。
②:表達(dá)式滿足條件。
命令:(gdb) watch [條件]
例如:
(gdb) watch tmp1+tmp2 > 10 Hardware watchpoint 1: tmp1+tmp2 > 10給特定運(yùn)行的線程加 watch
查看運(yùn)行的線程
命令:
(gdb) i threads帶 * 為主線程。
為運(yùn)行的線程設(shè)置 watchpoint
命令:watch [變量名] thread [線程號(hào)]
舉例:
(gdb) watch tmp thread 3給3號(hào)線程的tmp變量設(shè)置觀察點(diǎn)。
說明:設(shè)置只有只有3號(hào)線程改變tmp值時(shí),觸發(fā)斷點(diǎn)。
rwatch 讀觀察點(diǎn)
當(dāng)變量的值被讀取時(shí),觸發(fā)斷點(diǎn)。
命令:(gdb) rwatch [變量名]
例如:
(gdb) rwatch tmp Hardware read watchpoint 1: tmpawatch 讀寫觀察點(diǎn)
當(dāng)變量的值發(fā)生改變或者被讀取時(shí),觸發(fā)斷點(diǎn)。
命令:(gdb) awatch [變量名]
例如:
(gdb) awatch tmp Hardware access (read/write) watchpoint 1: tmpinfo watch 查看觀察點(diǎn)
命令:info watch
舉例:
(gdb) info watch Num Type Disp Enb Address What 1 acc watchpoint keep y tmpbreakpoint already hit 1 timedelete 刪除觀察點(diǎn)
命令:
(gdb) delete Delete all breakpoints? (y or n) y (gdb) info watch No watchpoints.disable 禁用觀察點(diǎn)
命令:
(gdb) awatch tmp Hardware access (read/write) watchpoint 2: tmp (gdb) info watch Num Type Disp Enb Address What 2 acc watchpoint keep y tmp (gdb) disable 2 (gdb) info watch Num Type Disp Enb Address What 2 acc watchpoint keep n tmp (gdb)說明:觀察點(diǎn)存在,但是滿足條件后不會(huì)觸發(fā)斷點(diǎn)。
enable 啟用觀察點(diǎn)
命令:
(gdb) awatch tmp Hardware access (read/write) watchpoint 2: tmp (gdb) info watch Num Type Disp Enb Address What 2 acc watchpoint keep y tmp (gdb) disable 2 (gdb) info watch Num Type Disp Enb Address What 2 acc watchpoint keep n tmp (gdb) enable 2 (gdb) info watch Num Type Disp Enb Address What 2 acc watchpoint keep y tmp (gdb)禁用之后啟用觀察點(diǎn),滿足條件之后觸發(fā)觀察點(diǎn)。
總結(jié)
以上是生活随笔為你收集整理的GDB调试:观察点(数据断点)【GDB调试】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 取代C语言的标准输入输出:cin 和 c
- 下一篇: GDB调试基础操作详解【GDB调试】