授予用户选项以发送有关未捕获异常的错误报告

时间:2014-03-03 18:03:14

标签: c# .net winforms exception-handling

我开发了第三方公司使用的应用程序。 由于我是一个可怕的编码器,应用程序仍然有一些错误导致它崩溃(例如未处理的nullpointerexception)。

这是一个在.NET 4.5上运行的Windows窗体应用程序,现在他们只是获得了经典的“未处理的异常导致应用程序终止,按详细信息获取更多信息”。

试图说服他们按下“详细信息”并向我发送堆栈跟踪非常有用,但他们似乎都很不情愿。

是否可以自动执行此行为,例如向他们展示自定义全局“异常捕手”,他们只需按一个按钮即可通过电子邮件发送给我。

Inbefore“全局异常处理不好”和“为什么你的应用程序抛出nullpointerexceptions,你是一个糟糕的编码器等。”

BR Tomas Anyuru

4 个答案:

答案 0 :(得分:2)

我猜你得到的例外是未处理的。

因此,您必须使用Application.ThreadException事件来处理它们。由于没有.NET自动邮件发送和消息显示,您必须在此事件中实现自己的。

请查看answer I wrote,了解一些异常捕获策略示例。

答案 1 :(得分:2)

将整个main()函数包装在try-catch语句中  这样任何未处理的异常都将回滚并将被捕获在catch块中:

static void main()
{
    try
    {
        // the application code...
    }
    catch (Exception ex)
    {
        DialogResult result = MessageBox.Show(
        "Some error occured, please click ok to send it to the develpoer");
        if (result = OK)
            email(ex); // this is your function to send the email.
                        // useful information is also in ex.message
        // here program will exit without error!
    }
}

答案 2 :(得分:0)

你可以使用log 4 net它是开源的日志工具,Java开发人员大量使用,这个版本专门用于.Net http://logging.apache.org/log4net/

答案 3 :(得分:0)

除了@Shamim代码之外,你可以将你的main函数包装在try,catch块中,因为这里的catch块会跟踪try块中调用的任何函数内发生的异常。

在某些时候在catch区块内拍摄邮件会引发线程中止和异常,因此最终将是正确的位置:

catch (Exception err)
                {
                    mailBody = "Error: " + Convert.ToString(err.Message) + "<br /> Source: " + Convert.ToString(err.Source);
                    //Can display some message to user in an Literal Control from here.
                }
                finally 
                {
                    if (!string.IsNullOrEmpty(mailBody))
                    {
                        mailObject.To.Add(mailTo);
                        mailObject.CC.Add(mailCc);
                        mailObject.Body = mailBody;

                        MailService(mailObject);
                    }
                }

MailService是一种发送邮件的方法,它接受MailObject作为参数。