簡體   English   中英

如何在 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM