Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有没有办法打印StackOverflowException的扩展信息?_C#_Exception_Stack Overflow - Fatal编程技术网

C# 有没有办法打印StackOverflowException的扩展信息?

C# 有没有办法打印StackOverflowException的扩展信息?,c#,exception,stack-overflow,C#,Exception,Stack Overflow,我的一个客户报告说我开发的软件意外终止。在应用程序日志中,唯一可用的文本是进程因StackOverflowException而终止。没有更多信息可以帮助我诊断和修复它 有没有办法获取引发异常的位置?VS在StackOverflowException上中断,但是有没有可行的方法可以在不在调试器中运行应用程序的情况下诊断它(或者在所有包含递归的方法中查找它)?堆栈溢出后,您通常无法执行任何代码,这是罕见的不可修补的致命异常之一,因此,您不能简单地捕获它来记录任何扩展的详细信息 解决这个问题的唯一方法

我的一个客户报告说我开发的软件意外终止。在应用程序日志中,唯一可用的文本是
进程因StackOverflowException而终止。
没有更多信息可以帮助我诊断和修复它


有没有办法获取引发异常的位置?VS在StackOverflowException上中断,但是有没有可行的方法可以在不在调试器中运行应用程序的情况下诊断它(或者在所有包含递归的方法中查找它)?

堆栈溢出后,您通常无法执行任何代码,这是罕见的不可修补的致命异常之一,因此,您不能简单地捕获它来记录任何扩展的详细信息

解决这个问题的唯一方法是从堆栈溢出的代码外部跟踪异常。您需要创建一个本机代码应用程序来承载CLR。如果这样做,您可以指定
StackOverflowException
不是100%致命的。这一点在以下网站上简要介绍:

如果您的应用程序承载公共语言运行库(CLR),它可以指定CLR应卸载发生堆栈溢出异常的应用程序域,并让相应的进程继续。有关详细信息,请参阅


但即使这样,也意味着一个简单的
try
catch
不足以实际捕获异常。您必须确保异常处理不是从堆栈溢出的应用程序域完成的。它可能是从不同的应用程序域完成的,也可能是从非托管代码完成的。

我发现了一些URL,如果您能够调试它,当然可以提供帮助。请在解决方案中添加一个合适的日志系统(按照log4net的思路思考),并确保在崩溃发生时记录堆栈跟踪和内部异常。@TimothyGroote请将答案作为答案而不是注释发布。但是,如果你把它作为一个答案,它应该被否决,因为它是错误的。这对于堆栈溢出不起作用,也不起作用。堆栈溢出只会使它发生的特定AppDomain崩溃,还是整个CLR都崩溃了?@Asad我的答案中的引号不是已经回答了吗?它说,通常整个过程无法继续,但如果你自己主持运行时,你可以更改它,以便只杀死特定的应用程序域。啊,是的,对不起。我第一次读的时候不明白这句话。