如何使用腳本文件獲取Windbg中某個實例的屬性地址?如何通過腳本從Windbg獲取C++屬性的地址
屬性意外改變,無法從那裏看到值從Visual Studio 2010調試器更改並使用斷點om內存地址doe snot help,因爲我無法在類的析構函數之後取消設置斷點被稱爲。發生錯誤的對象的具體實例也不固定。
這是一個用戶空間應用程序。
如何使用腳本文件獲取Windbg中某個實例的屬性地址?如何通過腳本從Windbg獲取C++屬性的地址
屬性意外改變,無法從那裏看到值從Visual Studio 2010調試器更改並使用斷點om內存地址doe snot help,因爲我無法在類的析構函數之後取消設置斷點被稱爲。發生錯誤的對象的具體實例也不固定。
這是一個用戶空間應用程序。
如果我理解你是正確的,你需要在C++類實例的地址+偏移處設置一個ba(Access on Break)。 只要所討論的類沒有被實例化很多次,這是可能的。
1)在屬性初始化後,在構造函數中創建一個普通的bp中斷。
bp Foo:Foo+<xxx>
您必須計算屬性的偏移量,檢查here。
你必須在這個時刻確定哪個寄存器保存了這個指針。
2)然後修改1)破設置一個附加的BA(打破接入)
斷裂地址然後必須計算到這+偏移量。 它是ID被指定,因爲我們必須刪除析構函數突破重要
它應該是這樣的:
bp <module>!Foo:Foo+<xxx> 「ba[@eax] w4 @eax+4;gc 」
From hlp:
[~Thread] ba[ID] Access Size [Options] [Address [Passes]] ["CommandString"]
3)設置代碼斷點(BP)在析構函數,並刪除巴從 以上再次ypu必須找到一個直接或間接持有這個指針的寄存器。 喜歡的東西:
bc[poi(@ebp-0x08)]
我已經這樣做了,但只要你沒有用完的斷點,如果程序實例太多的工作。
注意:語法可能不是100%正確的,這是自上次以來的一段時間。
C++本身沒有任何屬性。 C++/CX確實有屬性,但顯然它不是你所說的,因爲你的「屬性」改變了,而C++/CX屬性是不變的。請澄清你在說什麼。也許你的意思是一個會員領域? –
具有屬性我的意思是成員字段。從谷歌搜索我看到,屬性有一個不同的含義,因爲我已經在上面使用它。 – Johan