有什么方法可以在 StackOverflowException 上打印任何扩展信息吗?
Is there any way to print any extended information on StackOverflowException?
我的一位客户报告说我开发的软件意外终止。在应用程序日志中,唯一可用的文本是 Process is terminated due to WhosebugException.
没有更多信息可以帮助我诊断和修复它。
有什么办法可以得到异常抛出的位置吗? VS 在 WhosebugException 上中断,但是是否有任何可行的方法可以在没有 运行 调试器中的应用程序(或在所有包含递归的方法中寻找它)的情况下诊断它?
堆栈溢出后通常无法执行任何代码,这是罕见的无法捕获的致命异常之一,因此您不能简单地捕获它来记录任何扩展详细信息。
解决此问题的唯一方法是从具有堆栈溢出的代码外部跟踪异常。您需要创建一个本机代码应用程序来托管 CLR。如果这样做,您可以指定 WhosebugException
不是 100% 致命。 WhosebugException
MSDN page:
上简单提到了这一点
If your app hosts the common language runtime (CLR), it can specify that the CLR should unload the application domain where the stack overflow exception occurs and let the corresponding process continue. For more information, see ICLRPolicyManager Interface.
但即便如此,仍然意味着简单的 try
...catch
不足以实际捕获异常。您必须确保异常处理不是从具有堆栈溢出的应用程序域完成的。它可能是从不同的应用程序域完成的,也可能是从非托管代码完成的。
我的一位客户报告说我开发的软件意外终止。在应用程序日志中,唯一可用的文本是 Process is terminated due to WhosebugException.
没有更多信息可以帮助我诊断和修复它。
有什么办法可以得到异常抛出的位置吗? VS 在 WhosebugException 上中断,但是是否有任何可行的方法可以在没有 运行 调试器中的应用程序(或在所有包含递归的方法中寻找它)的情况下诊断它?
堆栈溢出后通常无法执行任何代码,这是罕见的无法捕获的致命异常之一,因此您不能简单地捕获它来记录任何扩展详细信息。
解决此问题的唯一方法是从具有堆栈溢出的代码外部跟踪异常。您需要创建一个本机代码应用程序来托管 CLR。如果这样做,您可以指定 WhosebugException
不是 100% 致命。 WhosebugException
MSDN page:
If your app hosts the common language runtime (CLR), it can specify that the CLR should unload the application domain where the stack overflow exception occurs and let the corresponding process continue. For more information, see ICLRPolicyManager Interface.
但即便如此,仍然意味着简单的 try
...catch
不足以实际捕获异常。您必须确保异常处理不是从具有堆栈溢出的应用程序域完成的。它可能是从不同的应用程序域完成的,也可能是从非托管代码完成的。