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

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

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

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

在 gdb 調(diào)試中,

watch 命令有兩種設置觀察點的方式:

  • 硬件觀察點
  • 軟件觀察點

注意:

而 awatch 和 rwatch 命令只能設置硬件觀察點。

watch 命令所支持的兩種設置機制 

軟件觀察點:

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

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

硬件觀察點:

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

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

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

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

Hardware watchpoint num: Could not insert watchpoint

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

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

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

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

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

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

set can-use-hw-watchpoints 0

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

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

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

Expression cannot be implemented with read/access watchpoint.

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

1.  watch 命令可以設置硬件觀察點方式或軟件觀察點的方式。而 rwatch 命令與 awatch 命令只能設置硬件觀察點的方式。

2. 每個命令的功能不同。

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

總結

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

相關文章

最新評論