Visual studio 在visual studio调试器中查看非平凡表达式时出现问题 基本上,我的问题是,我希望VisualStudio(2010专业)能够评估在我调试的代码中的表窗口中的任何VisualC++表达式,但是显然有一些东西阻止了这种情况发生。例如,在处理CString时,在watch窗口中对CString上的方法IsEmpty求值会产生成员函数not found错误,基本相等比较(在正在调试的代码中显然没有问题)也是如此

Visual studio 在visual studio调试器中查看非平凡表达式时出现问题 基本上,我的问题是,我希望VisualStudio(2010专业)能够评估在我调试的代码中的表窗口中的任何VisualC++表达式,但是显然有一些东西阻止了这种情况发生。例如,在处理CString时,在watch窗口中对CString上的方法IsEmpty求值会产生成员函数not found错误,基本相等比较(在正在调试的代码中显然没有问题)也是如此,visual-studio,debugging,visual-c++,Visual Studio,Debugging,Visual C++,是我错过了什么,还是我要求的太多了?显而易见的解决方案是在我的代码中为我正在寻找的任何CString操作添加调试语句,但我不希望这样做 更新/示例: CString blah = _T("blah"); 在我的代码中调用blah.IsEmpty()效果很好,但是在调试器的监视窗口中,我得到了上面的错误(CXX0052)。可以在观察窗口中看到变量blah的内容。我可以再现您的问题,而且,实际上,VS watch窗口显示未找到成员函数以及错误代码CXX0052。 在中,我发现这个问题是由于内联函

是我错过了什么,还是我要求的太多了?显而易见的解决方案是在我的代码中为我正在寻找的任何CString操作添加调试语句,但我不希望这样做

更新/示例:

CString blah = _T("blah");

在我的代码中调用
blah.IsEmpty()
效果很好,但是在调试器的监视窗口中,我得到了上面的错误(
CXX0052
)。可以在观察窗口中看到变量
blah
的内容。

我可以再现您的问题,而且,实际上,VS watch窗口显示未找到
成员函数
以及错误代码
CXX0052

在中,我发现这个问题是由于内联函数的调用引起的,
CString::IsEmpty()
成员函数可能以某种方式内联(这是监视窗口计算器看到的),要解决这个问题,首先打开项目配置并禁用内联

第二,仍然在项目配置中,选择在静态库中使用MFC(如果将调用的函数用作共享库,则监视窗口会一直将其视为内联函数,这可能是因为在共享库中,代码是内联的,监视窗口计算器不使用此类运行库的调试版本)

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

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


您当前的项目或您创建的任何项目都会失败?你有什么版本的VS?你能创建一个演示项目来重现这个问题,并在这里发布一个代码片段,给你同样的警告吗?我正在VS2010 Professional中处理几个MFC项目(更新如上)。刚刚创建了一个新的MFC项目(示例Microsoft项目)来尝试它;同样的问题。我将添加一个片段。感谢您的详细回答,我按照您的步骤(由于在静态库中使用MFC的设置和项目所需的多线程DLL标志(/MD),我还必须添加
#defineafxdl
),能够编译、链接和运行,但不幸的是,在监视窗口计算器中出现了与以前相同的问题。我会再试一次和/或另一个项目。我在另一个项目中尝试过,同样的步骤,同样的结果。这两个项目都依赖于其他DLL,第二个也是一个显然依赖于另一个EXE文件运行的DLL。你不认为我也需要用修改过的设置构建其他DLL和EXE,是吗?我正在调试修改过的二进制文件,并且在相应的代码库中有断点,所以这不重要。但是我想还是要尝试一下……@newenglander你能把这个项目发布到某个地方吗?,这样我就可以下载它并玩弄配置,找出可能解决问题的遗漏参数。当然还有另一组选项可以消除CXX052警告感谢您的报价,问题是该项目依赖于其他几个项目/DLL,因此需要发送的内容很多。我必须请求许可才能共享此文件。我可以看看我们是否有一个没有那么多依赖项的类似项目(或创建一个)。但是我必须等到下周,现在无法访问这些文件。@newenglander对不起,我以为这个项目是一个测试项目,你能告诉我(一步一步)如何复制你的项目集的基本版本吗?