我开发了第三方公司使用的应用程序。 由于我是一个可怕的编码器,应用程序仍然有一些错误导致它崩溃(例如未处理的nullpointerexception)。
这是一个在.NET 4.5上运行的Windows窗体应用程序,现在他们只是获得了经典的“未处理的异常导致应用程序终止,按详细信息获取更多信息”。
试图说服他们按下“详细信息”并向我发送堆栈跟踪非常有用,但他们似乎都很不情愿。
是否可以自动执行此行为,例如向他们展示自定义全局“异常捕手”,他们只需按一个按钮即可通过电子邮件发送给我。
Inbefore“全局异常处理不好”和“为什么你的应用程序抛出nullpointerexceptions,你是一个糟糕的编码器等。”
BR Tomas Anyuru
答案 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作为参数。