亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我可以在GDB中的'內存訪問'上設置斷點嗎?

我可以在GDB中的'內存訪問'上設置斷點嗎?

小唯快跑啊 2019-07-23 16:51:09
我可以在GDB中的'內存訪問'上設置斷點嗎?我正在通過gdb運行應用程序,我想在訪問/更改特定變量的任何時候設置斷點。有這么好的方法嗎?我也有興趣用其他方法來監視C / C ++中的變量,以查看它是否/何時發生變化。
查看完整描述

3 回答

?
ABOUTYOU

TA貢獻1812條經驗 獲得超5個贊

手表上只寫符,rwatch讓你讀破發,并awatch讓你打破的讀/寫。

您可以在內存位置設置讀取觀察點:

gdb$ rwatch *0xfeedfaceHardware read watchpoint 2: *0xfeedface

但是一個限制適用于rwatch和awatch命令; 你不能在表達式中使用gdb變量:

gdb$ rwatch $ebx+0xec1a04fExpression cannot be implemented with read/access watchpoint.

所以你必須自己擴展它們:

gdb$ print $ebx $13 = 0x135700gdb$ rwatch *0x135700+0xec1a04fHardware read watchpoint 3: *0x135700 + 0xec1a04fgdb$ cHardware read watchpoint 3: *0x135700 + 0xec1a04fValue = 0xec34daf0x9527d6e7 in objc_msgSend ()

編輯:哦,順便說一下。您需要硬件或軟件支持。軟件顯然要慢得多。要了解您的操作系統是否支持硬件觀察點,您可以查看can-use-hw-watchpoints環境設置。

gdb$ show can-use-hw-watchpointsDebugger's willingness to use watchpoint hardware is 1.


查看完整回答
反對 回復 2019-07-23
?
Cats萌萌

TA貢獻1805條經驗 獲得超9個贊

您正在尋找的是一個觀察點。

用法

(gdb) watch foo:觀察變量的值 foo

(gdb) watch *(int*)0x12345678:觀察地址指向的值,按照您想要的任何類型

(gdb) watch a*b + c/d:觀看一個任意復雜的表達式,在程序的母語中有效

觀察點有三種:

  • watch寫入時gdb會中斷

  • rwatch:gdb會破壞讀取的發生

  • awatch:gdb在兩種情況下都會中斷

您可以選擇更適合您需求的產品。

有關更多信息,請查看信息。


查看完整回答
反對 回復 2019-07-23
?
慕后森

TA貢獻1802條經驗 獲得超5個贊

我只是嘗試了以下內容:

 $ cat gdbtest.c
 int abc = 43;
 int main()
 {
   abc = 10;
 }
 $ gcc -g -o gdbtest gdbtest.c
 $ gdb gdbtest
 ...
 (gdb) watch abc
 Hardware watchpoint 1: abc
 (gdb) r
 Starting program: /home/mweerden/gdbtest 
 ...
 Old value = 43
 New value = 10
 main () at gdbtest.c:6
 6       }
 (gdb) quit

所以看起來可能,但你確實需要一些硬件支持。


查看完整回答
反對 回復 2019-07-23
  • 3 回答
  • 0 關注
  • 1703 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號