在visual studio调试器中观察非平凡表达式的问题

new*_*der 4 debugging visual-studio visual-c++

基本上我的问题是我希望Visual Studio(2010 Professional)能够在我正在调试的代码中处理它在处理窗口中处理的任何Visual C++表达式,但显然有一些东西阻止了这种情况的发生.例如,在处理CStrings时,IsEmpty在监视窗口中对CString 的方法进行评估会给出一个Member function not found错误,就像基本的相等比较一样(在被调试的代码中显然没有问题).

我在这里遗漏了什么,或者是我要求的太多了?显而易见的解决方案是将调试语句放在我的代码中,用于我正在寻找的任何CString操作,但我宁愿不必这样做.

更新/例子:

CString blah = _T("blah");
Run Code Online (Sandbox Code Playgroud)

调用blah.IsEmpty()我的代码工作正常,但在调试器的监视窗口中我得到上面的错误(CXX0052).blah可以在监视窗口看到变量的内容.

hig*_*aro 6

我可以重现你的问题,实际上,VS监视窗口会显示Member function not found错误代码CXX0052. 在此输入图像描述

MSDN文档中我发现这个问题是由于内联函数的调用引起的,CString::IsEmpty()成员函数可能以某种方式内联(这是Watch Window评估者​​看到的),解决问题,首先打开项目配置并禁用内联

在此输入图像描述

其次,仍然在项目配置中,选择在静态库中使用MFC(如果将其用作共享库,Watch Window会以某种方式将被调用函数视为内联函数,这可能是因为在共享库中代码是内联的, Watch Window评估程序不使用此类运行时库的Debug构建.

在此输入图像描述

第三,清理并重建您的解决方案.

之后,应该修复问题(如果在监视面板中看到灰色值,请记得刷新表达式).请记住切换回原始的Debug选项或更好,创建一个新的Debug配置文件以保留此设置.

在此输入图像描述