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