我有类似于以下代码的东西......
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的情况。
答案 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;
}
它被优化了但我可能会收到未使用变量的编译器警告。但是在这种情况下,条件断点(其他答案)可能更好