在使用Visual Studio 2010进行调试时,忽略跨AppDomains的异常。

12 浏览
0 Comments

在使用Visual Studio 2010进行调试时,忽略跨AppDomains的异常。

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

我已经正确地在一个`try/catch`中包装了会抛出异常的方法调用,并且在正常运行应用程序(一个ASP.NET MVC应用程序)时,异常会被正确地捕获,但是当在Visual Studio 2010中调试`w3wp.exe`时,它总是在抛出异常的方法调用上中断,并且无论如何,我都无法避免这个异常。

我试过在包含`try/catch`和抛出异常的外部方法上添加`[DebuggerStepThrough]`修饰符,但是没有任何效果。继续(F5),跳过(F10)或跳出(F11)都没有任何作用;Visual Studio只是暂停一下,然后在完全相同的位置以完全相同的异常再次中断。一旦Visual Studio停在异常发生的地方,似乎完全没有办法继续执行。

我确切地在调用`assembly.GetExportedTypes()`,如果导出的类型引用无法找到的程序集,可能会抛出异常(这是我想要忽略的情况)。抛出的异常是:

FileNotFoundException crossed a native/managed boundary

我正确地捕获了`FileNotFoundException`,如我所说,运行应用程序时可以正常工作,但是在调试时不行。我该如何让调试器明白我对`assembly.GetExportedTypes()`是否抛出异常不感兴趣?

更新:

我以为通过取消在Visual Studio 2010中的选项“在异常跨越AppDomain或托管/本机边界时中断(仅限托管)”(在调试>常规中)可以解决这个问题,但是问题刚刚又出现了。我已经在相关方法上添加了`[DebuggerStepThrough]`、`[DebuggerStepperBoundary]`和`[DebuggerNonUserCodeAttribute]`修饰符,但没有任何效果。

0
0 Comments

在Visual Studio 2010中调试时忽略跨AppDomains的异常可能会遇到问题。可能是由于.NET Framework或Visual Studio的问题,所以可以尝试以下解决方法:

1. 在调试器中取消选中“启用我的代码”选项。这将确保在引用中发生异常时,VS会中断调试。

Uncheck "Enable Just My Code" in Debugger

2. 配置Visual Studio 2013以调试.NET Framework。与第一种方法相同。

Configure Visual Studio 2013 for debugging .NET framework

3. 使用DnSpy调试任何程序集。即使源代码不可用,它也会提供源代码跟踪。详见这篇文章的第三点:"7 Debugging Techniques you should know in C# .NET" -- "3. Debug your references with DnSpy"。此外,该文章的第三节底部还提供了关于如何使用dotPeek和ReSharper的类似方法的更多提示。

Use DnSpy to debug any assembly.

最后,如果以上方法都不起作用,还有一个最后的建议。当跨AppDomain边界时,您正在使用远程处理。您可以尝试从在两个独立AppDomain中运行转为在两个独立的Windows进程中运行。您仍然应该使用远程处理,所以希望这不会增加太多工作量。另外,请不要忘记将自己找到的任何解决方案告诉我们。

暂时忘记合并AppDomains到一个中。只需创建使用不同的Visual Studio解决方案。当然,您使用两个不同的AppDomains是有原因的...然而,这可能是最轻松的前进方式。

以上就是解决在Visual Studio 2010中调试时忽略跨AppDomains的异常问题的原因和解决方法。

0
0 Comments

在Visual Studio 2010中,有一个名为"Break when exceptions cross AppDomain or managed/native boundaries (Managed only)"的选项(在Debugging > General下),当取消选中时,有时会起到帮助作用。当它没有起作用时,我需要退出Visual Studio 2010,删除所有临时文件,然后再试一次。这并不是一个很优雅的解决方法,所以如果有人有更好的想法,请提供。这个方法也适用于VS 2008和VS 2013。

从上述内容中可以得出以下结论:该问题的出现可能是由于在调试过程中,跨AppDomains引发的异常没有被捕捉到,导致程序无法正常执行。解决方法是在Visual Studio 2010中取消"Break when exceptions cross AppDomain or managed/native boundaries (Managed only)"选项的勾选,或者删除临时文件后重试。

0