gpt4 book ai didi

.net - 众所周知的 "Process is terminated due to StackOverflowException"屏幕是怎么出现的?

转载 作者:IT王子 更新时间:2023-10-28 23:34:21 42 4
gpt4 key购买 nike

一个奇怪的问题:

如果当前进程的堆栈已满,那么众所周知的“由于 StackOverflowException 而终止进程”屏幕是如何出现的?是运行时为其优雅降级保存了一些寄存器,还是可能运行另一个显示此屏幕的临时进程的内部技巧?

附:知道这个问题的可能答案可以帮助某人从类似的严重故障情况中建立自己的“优雅降级(假设显示此类消息的功能非常有限)”。

enter image description here

最佳答案

此消息由 CLR 显示。可以在SSCLI20发行版中看到代码,clr/src/vm/eepolicy.cpp源代码文件:

void DisplayStackOverflowException()
{
PrintToStdErrA("\n");

PrintToStdErrA("Process is terminated due to StackOverflowException.\n");
}

依次由 EEPolicy::HandleFatalStackOverflow() 方法调用。您完全可以看到它的唯一原因是因为您正在运行控制台模式应用程序,因此到 stderr 的输出最终会出现在控制台窗口上。只有当 Windows 错误报告 (WER) 本身没有终止应用程序时,您才会看到它。

没有拦截此异常的选项,CLR 无法继续运行托管代码,因为剩余的堆栈空间太少,无法安全运行任何托管代码。 DisplayStackOverflowException() 调用后的代码行是:

    TerminateProcess(GetCurrentProcess(), COR_E_STACKOVERFLOW);

关于.net - 众所周知的 "Process is terminated due to StackOverflowException"屏幕是怎么出现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14590174/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com