gpt4 book ai didi

c# - 如何在特定异常时终止 .NET 应用程序 - 可能没有堆栈展开?

转载 作者:太空宇宙 更新时间:2023-11-03 23:20:51 26 4
gpt4 key购买 nike

我有一个由 C# 和 C++ 代码组成的 .NET 应用程序(服务)。

C++ 代码中的“崩溃”(即 System.AccessViolationException 和其他 Corrupted State Exceptions)将被(“非”)正确处理,它们将直接导致我的 AppDomain。 CurrentDomain.UnhandledException 处理程序(记录),然后应用程序将终止,如果这样配置(它是),则写入 WER 转储文件。

对于这个应用程序,我确定 System.NullReferenceException 始终是一个错误,尤其是因为一些 C++/CLI 访问冲突错误会报告这个错误而不是 AV .

有什么方法可以让 .NET 在异常边界上捕获 NullReferenceException(在这种情况下是我的 OnTimer 回调)而是直接终止应用程序,展开堆栈,基本上是直接“跳转”到 AppDomain.CurrentDomain.UnhandledException?

最佳答案

你可以:

AppDomain.CurrentDomain.FirstChanceException += CurrentDomain_FirstChanceException;

然后

static void CurrentDomain_FirstChanceException(object sender, FirstChanceExceptionEventArgs e)
{
if (e.Exception is NullReferenceException)
{
Environment.FailFast("FailFast", e.Exception);
}
}

Environment.FailFast :

Immediately terminates a process after writing a message to the Windows Application event log, and then includes the message in error reporting to Microsoft.

This method terminates a process without running any active try/finally blocks or finalizers.

很明显,在 CurrentDomain_FirstChanceException 中,您可以复制您在 UnhandledException 中可能拥有的日志记录代码(或者有一个由两者调用的通用方法)

关于c# - 如何在特定异常时终止 .NET 应用程序 - 可能没有堆栈展开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35503673/

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