问题 在Visual Studio 2010中进行调试时,忽略跨AppDomains的异常


我在调试调用另一个AppDomain的应用程序时遇到问题,因为如果在其他AppDomain正在执行的任何操作中发生异常,则异常会冒泡并导致Visual Studio 2010无论如何都会中断。

我已经正确地包装了抛出的方法调用 try/catch,当我正常运行应用程序(ASP.NET MVC应用程序)时,但在调试时正确捕获异常 w3wp.exe 在Visual Studio 2010中,它总是在抛出的方法调用上中断,即使它应该被捕获,也无法通过异常。

我试图装饰其中的外部方法 try/catch 和抛出方法调用完成 [DebuggerStepThrough] 但这绝对没有效果。执行“继续(F5)”,“跳过(F10)”或“跳出(F11)”也不执行任何操作; Visual Studio只是稍微暂停一下,然后在相同的位置再次中断并使用完全相同的异常。一旦Visual Studio在发生异常的位置停止,似乎绝对没有办法继续前进。

我正在做的就是打电话 assembly.GetExportedTypes() 如果导出的类型引用了无法找到的程序集(我想忽略的情况),则可能抛出。抛出的异常是:

FileNotFoundException越过了本机/托管边界

我抓住了 FileNotFoundException 正如我所说,这在运行应用程序时有效,但在调试时无效。我怎样才能使调试器理解我是否给了老鼠屁股 assembly.GetExportedTypes() 抛出?

更新:

我认为通过取消选中Visual Studio 2010中的选项“当异常跨越AppDomain或托管/本地边界(仅管理)”(在“调试”>“常规”下)时,我已经解决了这个问题,但此问题刚刚再次出现。我撒了 [DebuggerStepThrough][DebuggerStepperBoundary] 和 [DebuggerNonUserCodeAttribute] 对有问题的方法没有任何影响。


1727
2018-06-23 14:38


起源



答案:


Visual Studio 2010中有一个选项称为“当异常跨越AppDomain或托管/本机边界时断开(仅限托管)”(在调试>常规下),当取消选中时,有时会有所帮助。如果不是,我需要退出Visual Studio 2010,删除所有临时文件,然后再试一次。不是一个非常优雅的解决方案,所以如果有任何更好的想法,请提供它们。


16
2018-06-23 14:42



这解决了我在VS 2008中的问题以及2010年的同一问题。谢谢! - Michael Eakins
谢谢@asbjornu。这也适用于VS 2013。这解决了HangFire Dashboard应用程序的问题。正在我的笔记本电脑上工作但不在我的桌面上。笔记本电脑选项未选中,桌面选中了选项。 - Pap


答案:


Visual Studio 2010中有一个选项称为“当异常跨越AppDomain或托管/本机边界时断开(仅限托管)”(在调试>常规下),当取消选中时,有时会有所帮助。如果不是,我需要退出Visual Studio 2010,删除所有临时文件,然后再试一次。不是一个非常优雅的解决方案,所以如果有任何更好的想法,请提供它们。


16
2018-06-23 14:42



这解决了我在VS 2008中的问题以及2010年的同一问题。谢谢! - Michael Eakins
谢谢@asbjornu。这也适用于VS 2013。这解决了HangFire Dashboard应用程序的问题。正在我的笔记本电脑上工作但不在我的桌面上。笔记本电脑选项未选中,桌面选中了选项。 - Pap