2010-04-29 71 views
1

我追逐一個對象的成員值似乎奇蹟般地改變,而沒有任何方法被稱爲修改它的錯誤。毫無疑問,事情很明顯,但難以追查。 我知道我可以在基於變量值的方法中放置條件斷點,但是它是否可以通過任何方式將斷點實際放在變量本身上?例如x == 4時觸發的斷點?我知道我可以放上手錶,斷點怎麼樣?變量變化值的斷點?

編輯:這是一個本機唯一項目,沒有管理說大話。

回答

4

可以使用data breakpoint。關於如何和何時可以使用它們有許多限制,即它們只能用本機代碼工作。 (據我所知,當變量發生變化時,你只能告訴它中斷,而不是當它變成特定的值,但我不完全確定;我的大部分代碼是託管/本機混合的因此不能使用數據斷點)。

+0

+1 - 如果這是因爲它看起來非常有用,它會幫助我解決我一直在追了過去三個月的錯誤。 – 2010-04-29 16:27:33

+0

它沒有 - 顯然它不像陣列有幫助 - 但是我發現了錯誤,所以我很高興。 – 2010-05-02 02:26:48

+0

它甚至可以通過編程完成:http://www.morearty.com/code/breakpoint/ – 2010-05-17 18:10:51

-1

你應該做的是剛剛住變量的設定/獲得 - 不只是一個模板的功能,但實際上在一個單獨的類,在設置/獲取必須用來訪問。然後在那裏放一個斷點。或者,爲了更容易切換和更改,可以將該值包裝在類中,並使用運算符重載(以及適當的中斷)進行更改。這可能是最乾淨和最便攜的解決方案。

什麼,你也可能會發現是變量被修改是不是您意想不到的途徑。我得到的最好例子是當我從零開始增加時,我從零中減去了無符號整數,所以當我尋找那些我知道修改它的地方時,沒有標記出來。無法解決跆拳道正在進行。

不過,據我所知,VC++不支持任何機制,打破上任意修改,如果數據斷點不會爲你工作。例如,如果它由於堆棧/堆損壞而更改。但如果你正在運行調試,我希望VC++會打破這些。

+0

所以你想讓我把每個變量都包裝在一個特殊的類中,完全重新設計整個代碼庫?但是如果你認爲你正在查看一個對象,並且你的指針混淆了,或者試圖在刪除它之後引用一個對象等,你仍然沒有意識到值可能會改變。 – 2010-04-29 21:50:15