当asp.net抛出异常时,异常对象包含堆栈跟踪属性,但它是一个很长的字符串。有没有办法将它作为一个数组或其他可以通过编程方式检查的结构?
我当前的问题是我偶尔会出现一个出现在管理功能中的错误。它很难重现,所以我想说当它发生时,我捕获异常并在堆栈中搜索我的代码中的最低级语句并显示它,而不是转储整个堆栈。好吧,也许这比它的价值更麻烦,我应该只是转储堆栈,找到并修复bug,然后撕掉堆栈转储。但是现在我很好奇它是否可能。
RE重复:不,那不是我的问题。我没有问如何在不抛出异常的情况下获得堆栈跟踪。我问,鉴于我遇到了异常,我可以将堆栈跟踪作为数组或其他结构而不是字符串blob。
答案 0 :(得分:0)
我的网站有两种报告异常错误的选项。
错误电子邮件选项可能是最容易实现的。可以根据需要使用电子邮件正文,并从异常对象中提取错误信息。
在< appSettings>中将错误电子邮件通讯组列表定义为逗号分隔的字符串您的web.config文件的一部分可以方便将来更新谁是谁以及谁没有被告知网站错误。
答案 1 :(得分:0)
最好的办法是在发生异常时给自己发送电子邮件。您可以在电子邮件中更轻松地阅读它,并且不会错过任何错误。
C#:
try
{
dv = dt.DefaultView;
}
catch (Exception ex)
{
var username = getusername();
Globals.SendError(username, ref ex);
dv= null;
}
然后最后是如何发送电子邮件:
public void SendError(string username, ref Exception ex)
{
var error = string.Empty;
try
{
username = username.Trim();
var site = ex.TargetSite;
var functionName = site == null ? null : site.Name;
error =
string.Format(
"Error in (your application name here).\r\nFunction Name: {0}. Failed.\r\nStackTrace: {1}.\r\nMessage: {2}.\r\nDateTime: {3}.",
functionName, ex.StackTrace.Trim(), ex.Message.Trim(), DateTime.Now);
if (string.IsNullOrEmpty(username))
error += "\r\nEOM.";
else
error += string.Format("\r\nUsername: {0}\r\nEOM.", username);
error = error.Trim();
//If there's an error try to send an email letting me know.
var client = new SmtpClient("mail.xyz.com", 25); //replace xyz with your domain
var mailMessage = new MailMessage("yourEmailHere@email.com", "yourEmailHere@email.com",
"Error in (Your application name here) Report", error);
client.Send(mailMessage);
client.Dispose();
mailMessage.Dispose();
}
catch (Exception)
{
// ignored
}
UpdateErrorHistory(error, username);
}