gpt4 book ai didi

c# - 未处理的异常终止执行时退出代码?

转载 作者:太空狗 更新时间:2023-10-29 17:51:45 25 4
gpt4 key购买 nike

当 C# .Net 控制台应用程序由于未处理的异常而终止时,是否有规则确定返回哪个退出代码或使用 255 始终

我没能找到这方面的文档。一个执行 throw new Exception() 的简单控制台应用程序以退出代码 255 退出。我想知道是否可以安全地假设所有未处理的异常都将返回相同的错误代码,或者是否存在变化/我需要注意的极端情况。

C:\Temp\> ThrowsExceptionConsoleApp.exe
C:\Temp\> echo %errorlevel%
255

最佳答案

不,不总是。 255 是一个 Unix 数字,通常通过以 -1 退出来生成,不清楚您是如何看到的。在 Windows 上,.NET 进程通常以 SEH 异常代码值退出,该代码值使进程崩溃并终止。对于托管异常,通常为 -532462766(又名 0xE0434352)。最后 3 个十六进制对拼写为“CCR”,一个在时间迷雾中失去意义的首字母缩写词,在 corexcep.h 中声明为 EXCEPTION_COMPLUS。样题is here .

行为良好的程序会订阅 AppDomain.CurrentDomain.UnhandledException 并在调用 Environment.Exit() 时提供更好的退出代码,例如 Marshal.GetHRForException() 生成的代码。您将获得与托管异常类型匹配的退出代码,标准异常类型的值记录在 CorError.h SDK 文件中。


 echo %errorlevel%

在之前的问题中没有看到。 %errorlevel% 的值只能在 0 到 255 之间,这是一个可以追溯到 MS-Dos 时代的限制。由于 SEH 异常代码总是更大,您通常总是会看到 255。使用 %errorlevel% 的唯一正确方法是在它不为 0 时假定程序失败。除非您从程序作者那里获得了特定文档。

关于c# - 未处理的异常终止执行时退出代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35294313/

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