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

时间:2011-09-21 12:02:56

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

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

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

更新/示例:

CString blah = _T("blah");

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

1 个答案:

答案 0 :(得分:6)

我可以重现您的问题,实际上,VS观看窗口会显示Member function not found以及错误代码CXX0052enter image description here

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

enter image description here

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

enter image description here

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

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

enter image description here