基本上我的问题是我希望 Visual Studio (2010 Professional) 能够评估它在我正在调试的代码中处理的监视窗口中的任何 Visual C++ 表达式,但显然有一些东西阻止了这种情况的发生。例如,在处理 CStrings 时,在观察窗口中评估 CString 上的 IsEmpty
方法会给我一个 Member function not found
错误,就像一个基本的相等比较(在被调试的代码中显然没有问题)。
我在这里错过了什么,还是我要求太多?明显的解决方案是在我的代码中为我正在寻找的任何 CString 操作添加调试语句,但我不想这样做。
更新/示例:
CString blah = _T("blah");
在我的代码中调用
blah.IsEmpty()
工作正常,但在调试器的监视窗口中,我收到了上面的错误 ( CXX0052
)。变量blah
的内容可以在观察窗口中看到。 最佳答案
我可以重现您的问题,实际上,VS 监视窗口显示 Member function not found
和错误代码 CXX0052
。
在the MSDN documentation中发现这个问题是由于调用了内联函数引起的,CString::IsEmpty()
成员函数很可能是以某种方式内联的(这是Watch Window评估器看到的),要解决这个问题,首先打开你的项目配置并禁用内联
其次,仍然在项目配置中,选择在静态库中使用 MFC(如果您将其用作共享库,观察窗口会以某种方式将被调用函数视为内联函数,这可能是因为在共享库中代码是内联的并且Watch Window 评估器不使用此类运行时库的调试版本)。
第三,清理并重建您的解决方案。
之后,应该在调试期间修复问题(如果您在监视面板中看到值变灰,请记住刷新表达式)。请记住切换回原始调试选项或更好的方式,创建一个新的调试配置文件以保留此设置。
关于visual-studio - 在 Visual Studio 调试器中观看非平凡表达式的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7499410/