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

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

概述我想在我的代码的根目录中使用某种catch-all异常机制,因此当应用程序意外终止时,我仍然可以提供一些有用的日志记录. 有点像 static void Main () { if (Debugger.IsAttached) RunApp(); else { try { RunApp(); } c 我想在我的代码的根目录中使用某种catch-all异常机制,因此当应用程序意外终止时,我仍然可以提供一些有用的日志记录.

有点像

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

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

由于异常会转移到运行时,因此窗口会提示附加visual studio,但由于已经重新抛出,因此堆栈中的所有本地和参数都已丢失.

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

解决方法 正如保罗贝茨已经提到的,你可能最好使用 AppDomain.UnhandledException事件而不是try / catch块.

在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调试器,同时仍提供有用的死亡日志记录全部内容,希望文章能够帮你解决c# – 附加.net调试器,同时仍提供有用的死亡日志记录所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1242587.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存