2011-04-02 94 views
0

最近我編寫了一個不能正常工作的函數。我設法弄清楚什麼是錯誤的,並以迂迴的方式修復它,但我想知道是否有更簡單的方法。該功能(精簡)是這樣的:特定情況下的斷點

int func(int param) 
{ 
    if(param == 0) return SOMETHING; 
    //... 
    for(int i = 0;i < 4;i++) { 
    // Point A 
    func(param - 1); 
    } 
    //... 
} 

我想在A點設置一個斷點,所以我可以看到PARAM = 10發生了什麼(例如)和i = 0,1,2, 3但問題是,該函數是遞歸的,所以它調用自己(在這種情況下)param = 9,8,...我想知道是否有方法來設置斷點只有一個特定的情況。在這種情況下,我使用了MS Visual C++ Express 2008,但是如果有辦法用另一個編譯器(g ++/gdb或許)來做,那也是有幫助的。

+2

最簡單的辦法:'如果(PARAM == 10)的DebugBreak();'' – Erik 2011-04-02 23:56:41

回答

4

在Visual Studio中,可以右鍵單擊斷點並以各種方式對其進行修改。
根據Condition...您可以指定您的條件,如param == 10。您甚至可以使用簡單的C庫函數進行字符串比較strcmp(mystr,"hi") == 0

2

Visual Studio調試器支持條件斷點。在編輯器中放置斷點後,右鍵單擊它並選擇「條件...」

0

在Visual Studio中,您可以設置conditional breakpoints(不確定其他環境)。如果你想在任何C++環境下做到這一點,ASSERT總是一個選項。

ASSERT(param != 10); 
+0

是ASSERT'肯定*不*如果你想突破後繼續的選項。 – Xeo 2011-04-03 00:02:45

+0

@xeo - 爲什麼不呢?在assert(並附上一個調試器,如果不存在的話)之後繼續工作很好(至少在MS開發環境中,或許我對其在其他地方的工作原理做了錯誤的假設) – dkackman 2011-04-03 00:05:09

+0

真的嗎?我使用VS2010和'assert'調用'abort',這是無法恢復的(或者至少我不知道如何)。 – Xeo 2011-04-03 00:08:24