无法使用 Visual Studio 2013 调试托管代码(“无法评估表达式”错误 - 正在使用调试版本)(请注意,VS 2012 有效)
Posted
技术标签:
【中文标题】无法使用 Visual Studio 2013 调试托管代码(“无法评估表达式”错误 - 正在使用调试版本)(请注意,VS 2012 有效)【英文标题】:Unable to debug managed code using visual studio 2013 ("Cannot evaluate expression" error - am using debug build) (Note that VS 2012 works) 【发布时间】:2014-02-04 19:40:21 【问题描述】:我有针对 4.5 构建的 .net 应用程序(GUI 和 PowerShell)。我的操作系统是服务器 2012。当我将应用程序附加到 2013 Visual Studio 时,调试器有时无法工作。它不评估表达式或显示本地人(并且还观察窗口/立即窗口没有任何作用 - 就好像项目是通过发布构建的)。但我已经使用“调试”配置进行构建。如前所述,当我简单地附加 VS 2012(是的,我有 2k13 和 2k12 SXS)时,同样的事情也有效
请注意,如果我将具有相同设置(托管调试)的相同进程附加到 Visual Studio 2012,它始终可以工作。
我确保符号已加载(通过检查 Visual Studio + 调试 + 窗口中的模块选项卡),断点被命中。
对可能是什么问题有任何想法吗?所有更新也是最新的。
当我使用 VS 2k13 IDE 进行开发时,启动 vs 2012 只是为了调试有点烦人。
问候!
【问题讨论】:
您是否尝试过在 VS2013 中恢复到旧的调试引擎? blogs.msdn.com/b/visualstudioalm/archive/2013/10/16/… @Andy,谢谢。我看过weblog.west-wind.com/posts/2013/Nov/21/… 这基本上是相同的答案。是的,它奏效了。几分钟前添加了答案,因为它可能对其他人有用。 【参考方案1】:如果您遇到同样的问题,请查看http://weblog.west-wind.com/posts/2013/Nov/21/Visual-Studio-2013-Could-not-evaluate-Expression-Debugger-Abnormality了解详情。
这是为我解决的答案:
我在工具 | 中设置了“使用托管兼容模式”标志。选项 |调试器 |一般的。
有关详细信息,请查看链接,因为他作为一个故事很好地解释了它:)
很高兴它成功了,否则我只需要在 vs 2k12 中加载项目只是为了调试它,这很烦人。
2014 年 6 月 12 日编辑
我已经用 visual studio 2013 update 2 (http://www.microsoft.com/en-us/download/details.aspx?id=42666) 更新了我的开发环境(根据下面 Maria 的建议)并删除了“使用托管兼容模式”。如果调试器适合我,我将测试我的应用程序(ps cmdlet、gui、服务)并在几周内更新您。
2014 年 6 月 26 日编辑
我已经测试了我的应用程序,幸运的是,一切运行良好 :)。甚至调试器在新的 async/await 模型上也做得很好。所以,看看你是否可以升级到“更新 2”——希望这也适用于你的环境吗?感谢 Maria 和调试器的团队!
问候。
【讨论】:
你太棒了,在条件断点中“无法评估表达式”。真的很烦!您的解决方案非常有效! 请注意,此处提出的解决方案使用旧的调试器引擎,该引擎将在某个时候被弃用,并且还错过了新引擎必须提供的所有新功能:blogs.msdn.com/b/visualstudioalm/archive/2013/10/16/… 我正在使用 VS 21013 Update 3,并且我已经启用了调试器的“托管兼容模式”,但这并没有解决我的问题。 (尽管如此,为您提供帮助 +1。) 对我有用的是(在调试时)打开菜单Debug -> Windows -> Modules
,按Ctrl+A
全选,然后右键单击并选择Load Symbols
。即使已经为我正在调试的模块加载了符号,我想某些东西被错误地缓存了。
还有一个Empty Symbol Cache
按钮可能具有类似的效果,位于Tools -> Options -> Debugging -> Symbols
。调试时该按钮被禁用。【参考方案2】:
我删除了所有断点,然后它开始使用 Visual Studio 2013 Update 1。这是 Dreamer 提到的 blog post 的建议之一。
【讨论】:
我尝试了所有其他解决方案,但只有这个对我有帮助。谢谢 像魔术一样工作!!听起来删除和插入重新启动了一些逻辑。【参考方案3】:我们已针对您在 Update 2 CTP 2 of Visual Studio 中描述的问题发布了修复程序 - 如果这不能解决您的问题,请告诉我!
谢谢! Maria - Visual Studio 调试器
【讨论】:
什么时候正式发布?我们通常不安装 RC。 不幸的是,这还没有公布。我会在 Soma 的博客上查看详细信息 - blogs.msdn.com/b/somasegar。您不必等待太久。 有人验证过 CTP2 修复了这个问题吗?它不在发行说明中。 更新 2 RTM 已发布 - blogs.msdn.com/b/visualstudio/archive/2014/05/12/… 我可以验证安装上述问题后,问题已为我解决。【参考方案4】:请注意,虽然接受的答案可能会暂时解决问题,但最好了解此解决方案的缺点。进行此更改将使 VS 2013 对所有项目使用旧样式的调试器。这是一个全局设置。对于单个项目,还有其他方法可以在本地更改它。请阅读此处了解更多信息:
http://blogs.msdn.com/b/visualstudioalm/archive/2013/10/16/switching-to-managed-compatibility-mode-in-visual-studio-2013.aspx
【讨论】:
请从博文中提取相关信息(如何操作),以便您的答案本身是完整的,链接仅供参考。链接不是答案。【参考方案5】:我们有一个自定义表达式评估器和我们自己的语言,即使在我将项目设置更改为博客中指定的设置后,此更改设置的警告消息也会始终出现。
<DebugEngines>351668CC-8477-4fbf-BFE3-5F1006E4DB1F</DebugEngines>
还有别的吗?
我们的客户正在使用 VS2013 pro。我已经为我们所有的项目关闭了所有“启用 Visual Studio 托管过程”,并将该属性添加到我们的客户项目中。每次我攻击 w3wp.exe 时,我仍然会看到警告。
重要提示:如果您的项目正在使用 Visual Studio 托管进程(许多项目类型的默认设置),您必须禁用托管进程,此修复才能正确更改调试模式。要禁用托管进程,请转到项目属性页面上的“调试”窗格,然后取消选中“启用 Visual Studio 托管进程”
【讨论】:
【参考方案6】:您可以通过应用以下几点来解决此错误
解决方案 1:
1) 重新启动 Visual Studio 并重新打开您的项目。 2) 打开您的项目 bin 目录并删除调试器无法正常工作的代码的 DLL。 3)然后再次在bin目录中添加DLL引用。 4) 删除所有断点。 5) 构建项目。 6) 在附加到进程窗口中使用 one w3wp.exe 进程附加 7) 享受您的问题已得到解决。
如果上述解决方案不起作用,那么您可以尝试以下链接中提供的解决方案http://weblog.west-wind.com/posts/2013/Nov/21/Visual-Studio-2013-Could-not-evaluate-Expression-Debugger-Abnormality
【讨论】:
【参考方案7】:我在调试时遇到了类似的问题,该错误是从创建类返回时发生的。该类初始化得很好(使用“new classname()”),但随后它在返回时给出了“无法评估表达式”错误。虽然它可以在以前的 Visual Studio 版本上运行,但在 VS 2017 上运行它就失败了。
经过一番摸索,结果发现类中的私有变量,尤其是arraylists和其他类,需要用初始值声明,即使设置为null。
一旦完成,一切正常,即使解决方案“似乎”与问题无关,也没有提供问题发生位置的明显线索。
【讨论】:
【参考方案8】:我们在使用 VS2013 更新 5 的 PostSharp 扩展版本 5.0.32 中遇到了这个问题。
我们的解决方法是将 PostSharp 扩展降级到版本 4.3.19 或禁用它。
【讨论】:
【参考方案9】:在 aspx 头文件上设置 AutoEventWireup="true"。这将打开调试模式。
【讨论】:
以上是关于无法使用 Visual Studio 2013 调试托管代码(“无法评估表达式”错误 - 正在使用调试版本)(请注意,VS 2012 有效)的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio 2013 无法识别 javascript [关闭]
Visual Studio 2013 中的“无法导入 ActiveX 控件”
Visual Studio 2013 RC 中的“无法找到或打开 PDB 文件”