我有一个名为 的非静态 const 方法size_t A::m() const
,如果它返回大于 1 的值,我想用它来触发断点。下面是class A
实例a
:
class A
{
public:
std::vector<double> myvec;
size_t m() const
{
return myvec.size();
}
} a;
所以我在这个条件下在 Visual Studio 2013 中添加了一个断点
a.m() > 1 // a is an instance of class A
但是,当我尝试编译它时,我从 IDE 收到以下消息:
无法设置以下断点:
在 myFile.cpp,第 xxx 行,当 'am() > 1' 为真时
这个表达式有副作用,不会被计算。
请注意,A::m()
它不修改任何内容,它只调用.size()
向量的方法并返回该值,因此表达式具有副作用的断言完全是错误的。其实把断点条件换成a.myvec.size() > 1
(即方法本身的内容)也是一样的效果!
关于什么可以用作断点中的条件,微软表示;
条件可以是调试器识别的任何有效表达式。
副作用的一个常见原因是在调试器窗口中评估函数调用。这样的评价通常是引人注目的。副作用的一个更微妙的原因是对托管代码中的属性和其他隐式函数调用的评估。
调试器无法判断属性评估或隐式函数调用是否有副作用。因此,默认情况下,调试器不会自动评估隐式函数调用。默认情况下允许属性评估,但可以在“选项”对话框中关闭。当尚未评估函数调用或属性时,会出现一个刷新图标。您可以通过单击刷新图标手动评估表达式。有关详细信息,请参阅如何:刷新观察值。
关闭属性评估或隐式函数调用时,可以使用 ac 格式修饰符强制评估(仅适用于 C#)。请参阅C# 中的格式说明符。
如果有人可以将以上段落翻译成英文,那就太好了。我可以将函数放入这些调试器条件中吗?