2010-07-21 22 views
0

情景是:存在深層調用層次結構,每個調用都將返回HRESULT。如果發生錯誤,函數將返回S_FALSE或S_ERROR,如果調用返回錯誤,調用者將直接返回錯誤代碼。通常所有的函數都會返回S_OK。 因此,在調試問題時,我需要做很多試驗,看看哪個調用返回了!S_OK,然後再深入下去,直到找到導致錯誤的最終位置。它能夠在返回值上設置「數據斷點」

我想知道是不是能夠創造上返回值「數據斷點」(EAX?)所以,當返回值發生變化或返回值等於某個值,則可以停止......

回答

0

爲什麼不只需將返回值分配給一個變量,在變量等於某個值時設置一箇中斷(這稱爲條件斷點),然後返回變量而不是返回S_FALSE/S_ERROR/S_OK等。

例如:

public long yourFunc() { 
    long ret = S_OK; 

    if (someCondition) { 
     ret = S_ERROR; 
    } 
    return ret; // set a conditional breakpoint here, and put in 
       // a condition where ret != S_OK 
} 

編輯
如果你不想/不能改變的代碼,你可能想看看這個線程: Is it possible to set a conditional breakpoint at the end of a function based on what the function is about to return?

+0

因爲有例如,深呼叫層次結構,例如 ret = some_other_function(); 如果some_other_function返回錯誤,我不得不重複這個過程。如果有一個處理樹狀數據結構的遞歸函數,我不得不重複很多次......所以我問有沒有什麼像返回值的數據斷點:) – superb 2010-07-21 15:03:11

+0

我不明白你爲什麼必須如果使用遞歸,則多次重複該過程。無論您在遞歸下降時有多深,條件滿足時條件斷點都會觸發。無論如何,如果你不想改變你的代碼,我在我的編輯中發佈了一個相關的鏈接,這可能會有所幫助。祝你好運 :)。 – dcp 2010-07-21 15:07:30

+0

問題是,在方法中它不會在一個地方返回,許多代碼似乎是這樣的: hr = some_call(...); if(FAILED(hr))return hr; 所以有條件的斷點將無法工作.... 我會檢查您發佈的鏈接.. – superb 2010-07-21 15:17:39

相關問題