变量占用某个值时的断点

时间:2010-03-22 17:09:05

标签: c visual-studio visual-studio-2008 debugging

我有类似于以下代码的东西......

void function(int x)
{
    // complicated operation on x
    blah 
    blah
}

除非x恰好是特定值,比如说“273”,否则它似乎都能正常工作。但x为273是一种罕见的事件,99.999%的时间是其他值。现在我希望观察使用x = 273调用此函数时的事件,因此我想插入一个仅受x命中的断点是该值。也许我可以这样做:

void function(int x)
{
    if (x == 273)
    {
        // put breakpoint on this line.
    }
    // complicated operation on x
    blah 
    blah
}

问题是,编译器可能会优化掉这个“if”语句,因为它没有做任何事情。所以我的问题是我应该在“if”语句中放置什么来确保它被编译成某种东西......或者我应该以某种完全不同的方式跟踪x == 273的情况。

5 个答案:

答案 0 :(得分:8)

听起来你正在寻找的是条件断点。这些是Visual Studio的一项功能,它允许仅在非常特定的条件为真时才能触发断点。

要执行此操作,请在函数的开头添加一个断点。然后右键单击它并选择“条件”。然后添加以下表达式

x == 273

现在您可以在不更改源二进制文件的情况下调试它。

答案 1 :(得分:3)

也许只使用条件断点?看看here如何设置它。

答案 2 :(得分:0)

创建新的条件断点(右键单击断点并选择“Condition ...”)并输入

x == 273

作为条件。

答案 3 :(得分:0)

if (x == 273)
{
    volatile int tmp = 0; // This is not get optimized
}

答案 4 :(得分:0)

如果我需要一个实线来设置断点,我会使用类似的东西:

{
   int i = 42;
}

它被优化了但我可能会收到未使用变量的编译器警告。但是在这种情况下,条件断点(其他答案)可能更好