特定情况下的断点

问题描述:

最近我编写了一个不能正常工作的函数。我设法弄清楚什么是错误的,并以迂回的方式修复它,但我想知道是否有更简单的方法。该功能(精简)是这样的:特定情况下的断点

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

在Visual Studio中,可以右键单击断点并以各种方式对其进行修改。
根据Condition...您可以指定您的条件,如param == 10。您甚至可以使用简单的C库函数进行字符串比较strcmp(mystr,"hi") == 0

Visual Studio调试器支持条件断点。在编辑器中放置断点后,右键单击它并选择“条件...”

在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