gpt4 book ai didi

c# - 附加 .net 调试器,同时仍然提供有用的死亡日志记录

转载 作者:太空狗 更新时间:2023-10-29 20:52:36 26 4
gpt4 key购买 nike

我希望在我的代码根部有某种捕获所有异常的机制,这样当应用程序意外终止时我仍然可以提供一些有用的日志记录。

类似的东西

static void Main () {
if (Debugger.IsAttached)
RunApp();
else {
try {
RunApp();
}
catch (Exception e) {
LogException(e);
throw;
}
}
}

虽然一切正常,但我的问题是当我想在引发异常后附加调试器时。

由于异常逃逸到运行时,windows 将提示附加 visual studio,除了,因为它已被重新抛出,所以堆栈上的所有局部变量和参数都已丢失。

有没有办法记录这些异常,同时仍然提供一种方法来附加调试器并保留所有有用的信息?

最佳答案

正如 Paul Betts 已经提到的,您最好使用 AppDomain.UnhandledException事件而不是 try/catch block 。

在您的 UnhandledException 事件处理程序中,您可以记录/显示异常,然后提供调试选项,例如显示一个表单,其中包含异常详细信息和要忽略、调试或退出的按钮。

如果用户选择调试选项,调用System.Diagnostics.Debugger.Break()这允许用户在完整调用堆栈仍然可用的情况下附加他们想要的任何调试器。

显然,您可以为您知道永远不会将调试器附加到的任何构建禁用此选项。

class Program
{
static void Main()
{
AppDomain.CurrentDomain.UnhandledException += ExceptionHandler;

RunApp();
}

static void ExceptionHandler(object sender, UnhandledExceptionEventArgs e)
{
Console.WriteLine(e.ExceptionObject);
Console.WriteLine("Do you want to Debug?");
if (Console.ReadLine().StartsWith("y"))
Debugger.Break();
}

static void RunApp()
{
throw new Exception();
}
}

关于c# - 附加 .net 调试器,同时仍然提供有用的死亡日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/211622/

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