欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

gdb調(diào)試中設(shè)置監(jiān)控點(diǎn)watch,rwatch,awatch的區(qū)別及說明

 更新時(shí)間:2023年09月04日 10:16:49   作者:凌肖戰(zhàn)  
這篇文章主要介紹了gdb調(diào)試中設(shè)置監(jiān)控點(diǎn)watch,rwatch,awatch的區(qū)別及說明,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

一. watch 命令的兩種監(jiān)控機(jī)制

在 gdb 調(diào)試中,

watch 命令有兩種設(shè)置觀察點(diǎn)的方式:

  • 硬件觀察點(diǎn)
  • 軟件觀察點(diǎn)

注意:

而 awatch 和 rwatch 命令只能設(shè)置硬件觀察點(diǎn)。

watch 命令所支持的兩種設(shè)置機(jī)制 

軟件觀察點(diǎn):

所謂軟件觀點(diǎn)(software watchpoint),即用 watch 命令監(jiān)控目標(biāo)變量(表達(dá)式)后,GDB 調(diào)試器會(huì)以單步執(zhí)行的方式運(yùn)行程序,并且每行代碼執(zhí)行完畢后,都會(huì)檢測該目標(biāo)變量(表達(dá)式)的值是否發(fā)生改變,如果改變則程序執(zhí)行停止。

可想而知,設(shè)置軟件觀察點(diǎn)的方式,一定程度上會(huì)影響程序的執(zhí)行效率。但從另一個(gè)角度看,調(diào)試程序的目的并非是為了獲得運(yùn)行結(jié)果,而是查找導(dǎo)致程序異常或 Bug 的代碼,因此即便軟件觀察點(diǎn)會(huì)影響執(zhí)行效率,一定程度上也是可以接受的。 

硬件觀察點(diǎn):

所謂硬件觀察點(diǎn)(Hardware watchpoint),和前者最大的不同是,它在實(shí)現(xiàn)監(jiān)控機(jī)制的同時(shí)不影響程序的執(zhí)行效率。

簡單的理解,系統(tǒng)會(huì)為 gdb 調(diào)試器提供少量的寄存器(例如, 32 位的 Intel x86 處理器提供有 4 個(gè)調(diào)試寄存器),每個(gè)寄存器都可以作為一個(gè)觀察點(diǎn)協(xié)助 gdb調(diào)試器完成監(jiān)控任務(wù)。

需要注意的是,基于寄存器個(gè)數(shù)的限制,如果調(diào)試環(huán)境中設(shè)立的硬件觀察點(diǎn)太多,則有些可能會(huì)失去作用,這種情況下,

gdb 調(diào)試器會(huì)發(fā)出如下警告:

Hardware watchpoint num: Could not insert watchpoint

除此之外,受到寄存器數(shù)量的限制,可能會(huì)出現(xiàn):無法使用硬件觀察點(diǎn)監(jiān)控?cái)?shù)據(jù)類型占用字節(jié)數(shù)較多的變量(表達(dá)式)。

例如,某些操作系統(tǒng)中,gdb 調(diào)試器最多只能監(jiān)控 4 個(gè)字節(jié)長度的數(shù)據(jù),這意味著 C、C++ double 類型的數(shù)據(jù)是無法使用硬件觀察點(diǎn)監(jiān)測的。

這種情況下,可以考慮將其換成占用字符串少的 float 類型。

目前,大多數(shù) PowerPC 或者基于 x86 的操作系統(tǒng),都支持采用硬件觀點(diǎn)。

并且 gdb 調(diào)試器在建立觀察斷點(diǎn)時(shí),會(huì)優(yōu)先嘗試建立硬件觀察點(diǎn),只有當(dāng)前環(huán)境不支持硬件觀察點(diǎn)時(shí),才會(huì)建立軟件觀察點(diǎn)。

借助如下指令,即可強(qiáng)制 gdb 調(diào)試器只建立軟件觀察點(diǎn):

set can-use-hw-watchpoints 0

注意,在執(zhí)行此命令之前建立的硬件觀察點(diǎn),不會(huì)受此命令的影響。

awatch 命令和 rwatch 命令只能設(shè)置硬件觀察點(diǎn),如果系統(tǒng)不支持或者借助如上命令禁用,

則 GDB 調(diào)試器會(huì)打印如下信息:

Expression cannot be implemented with read/access watchpoint.

二. watch 命令,rwatch 命令,awatch 命令的區(qū)別

1.  watch 命令可以設(shè)置硬件觀察點(diǎn)方式或軟件觀察點(diǎn)的方式。而 rwatch 命令與 awatch 命令只能設(shè)置硬件觀察點(diǎn)的方式。

2. 每個(gè)命令的功能不同。

  • watch 命令,即變量(或表達(dá)式)的值改變,程序都會(huì)停下來。
  • rwatch 命令,即當(dāng)發(fā)生讀取變量行為時(shí),程序就會(huì)暫停住。
  • awatch 命令,即當(dāng)發(fā)生讀取變量或改變變量值的行為時(shí),程序就會(huì)暫停住。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論