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

时间:2010-06-23 14:38:06

标签: c# debugging exception appdomain

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

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

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

我正在做的就是调用[DebuggerStepThrough],如果导出的类型引用了无法找到的程序集(我想忽略的情况),它可能会抛出。抛出的异常是:

  

FileNotFoundException越过了本机/托管边界

我正在正确地捕捉assembly.GetExportedTypes()正如我所说的,这在运行应用程序时有效,但在调试时无效。如果FileNotFoundException抛出,我怎样才能让调试器理解我给老鼠屁股?

更新

我认为我已经通过取消选中Visual Studio 2010中的选项来解决这个问题,该选项名为“当异常跨越AppDomain或托管/本地边界时断开(仅限托管)”(在调试>常规下),但问题再次弹出现在。我已经在问题的方法上添加了assembly.GetExportedTypes()[DebuggerStepThrough][DebuggerStepperBoundary],没有任何效果。

2 个答案:

答案 0 :(得分:16)

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

答案 1 :(得分:0)

您可能在.NET Framework或Visual Studio中遇到问题,因此可以尝试以下操作之一:

  1. Uncheck "Enable Just My Code" in Debugger这样可以确保如果您的其中一个引用中发生异常,VS就会中断。
  2. Configure Visual Studio 2013 for debugging .NET framework(与#1相同的链接)
  3. 使用DnSpy调试任何程序集。根据本文的#3:"7 Debugging Techniques you should know in C# .NET" -- "3. Debug your references with DnSpy",即使不可用,它也会为您提供源代码以进行跟踪。在第3部分的底部,有类似的使用dotPeek和ReSharper的技巧。

最后,如果这些方法无效,这是最后一个想法。跨越AppDomain边界时,您正在使用远程处理。您可以尝试从在两个单独的AppDomain中运行到在两个单独的Windows进程中运行。您仍然应该使用远程处理,因此希望它不会增加过多的工作。另外,不要忘记让我们知道您自己找到的任何解决方案。