我的Xamarin应用程序的发行版正在由非开发人员进行测试,这有时意味着测试人员无法与我交流他们遇到的错误的详细信息。
我想实现一些在发生崩溃或错误时将执行的代码,并将包含错误信息的电子邮件发送到我的地址,以帮助调试。我已经编写了一个电子邮件方法(请参阅下文),但我想知道每当引发未处理的异常时如何调用它,而不是将每个可能的方法都包装在try-catch中。
public static void Email(string htmlString)
{
try
{
MailMessage msg = new MailMessage();
SmtpClient smtp = new SmtpClient();
msg.From = new MailAddress("email here");
msg.To.Add(new MailAddress("other email here"));
msg.Subject = "Error Report";
msg.IsBodyHtml = true;
msg.Body = htmlString;
smtp.Port = 1234;
smtp.Host = "smtp here";
smtp.EnableSsl = true;
smtp.UseDefaultCredentials = false;
smtp.Credentials = new NetworkCredential("email", "password");
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
smtp.Send(msg);
}
catch (Exception)
{
}
}
在Xamarin应用程序中捕获错误的基本方法是使用try / catch块。尝试/捕获很容易获得。
您可以执行以下操作。
private void Send_Clicked(object sender, EventArgs e)
{
try
{
.......
}
catch(Exception ex)
{
Email(ex.ToString());
}
}
public static void Email(string htmlString)
{
MailMessage msg = new MailMessage();
SmtpClient smtp = new SmtpClient();
msg.From = new MailAddress("email here");
msg.To.Add(new MailAddress("other email here"));
msg.Subject = "Error Report";
msg.IsBodyHtml = true;
msg.Body = htmlString;
smtp.Port = 1234;
smtp.Host = "smtp here";
smtp.EnableSsl = true;
smtp.UseDefaultCredentials = false;
smtp.Credentials = new NetworkCredential("email", "password");
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
smtp.Send(msg);
}
Xamarin(Mono)在内部通过try-catch包围所有内容并引发Unhandled事件,从而内部“处理”那些未捕获的异常。
来自线程的解释。 Struggling to understand Xamarin exception handling
您可以检查链接。它提供了一种从日志文件获取错误日志的方法。Exceptions when using Xamarin Android