![](/img/trans.png)
[英]How do you add conditional breaking based on another breakpoint being hit? Visual C++
[英]How to add a conditional breakpoint in Visual C++
我想在 VC++ Express 2005 中為我的代碼添加斷點條件,以便只有在局部變量滿足指定條件時才會觸發斷點。 例如
bool my_test(UIDList test_list) {
foo(test_list);
bar(test_list); // I have a breakpoint here, but only want it to trigger if test_list.Length() > 0
print(test_list);
}
右鍵單擊我的斷點並選擇“條件...”后,我發現一個對話框似乎可以執行我想要的操作,但是我嘗試在文本字段中輸入的任何內容都會導致以下錯誤:
無法評估斷點條件:CX0052:錯誤:成員 function 不存在
我嘗試了幫助文檔,但找不到答案。 我希望有 VC++ 經驗的人能夠指出我正確的方向......
我之前曾嘗試升級到更新版本的 VC++ Express,但該項目沒有干凈地導入。 由於項目的復雜性和我目前的時間尺度,我現在不能考慮將升級作為解決方案。
VS 確實有一些微觀評估引擎——在變量觀察 windows、立即 window、斷點條件等中。我永遠找不到像樣的文檔。 據我所知,他們對願意調用的方法很挑剔,但他們對訪問限制也不敏感。
因此,您可能可以從
test_list.Length() > 0
類似於
test_list.m_nLength > 0
(或任何您的私人長度變量)。
(編輯)剛剛發現這個 msdn 頁面解釋了調試器可以處理和不能處理的表達式。 所以首先,確實——
'無論訪問控制如何,調試器都可以訪問所有 class 成員。 您可以檢查任何 class object 成員,包括基類和嵌入的成員對象。
其次,我對未能評估 'Length()' 的猜測 - 它可能是內聯的:
'除非 function 作為正常的 function 出現至少一次,否則調試器表達式不能調用內部或內聯 function。
使用 DebugBreak(); function:
bool my_test(UIDList test_list) {
foo(test_list);
if (bar(test_list) /* or whatever check :) */) // I have a breakpoint here, but only want it to trigger if test_list.Length() > 0
DebugBreak();
}
print(test_list);
}
或者你總是可以使用 assert(expression)
bool my_test(UIDList test_list) {
foo(test_list);
bar(test_list);
assert(test_list.Length() > 0); // will break here
print(test_list);
}
據我所知,斷點中的條件不能調用方法。 所以,你需要做的是事先計算好長度。 像這樣的東西。
bool my_test(UIDList test_list) {
foo(test_list);
int i = test_list.Length();
bar(test_list); // I have a breakpoint here, but only want it to trigger if test_list.Length() > 0
print(test_list);
}
在 i 的值上放一個條件斷點,你應該沒問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.