有没有办法让.net堆栈跟踪成为一个数组?

时间:2016-09-26 15:21:33

标签: asp.net exception stack-trace

当asp.net抛出异常时,异常对象包含堆栈跟踪属性,但它是一个很长的字符串。有没有办法将它作为一个数组或其他可以通过编程方式检查的结构?

我当前的问题是我偶尔会出现一个出现在管理功能中的错误。它很难重现,所以我想说当它发生时,我捕获异常并在堆栈中搜索我的代码中的最低级语句并显示它,而不是转储整个堆栈。好吧,也许这比它的价值更麻烦,我应该只是转储堆栈,找到并修复bug,然后撕掉堆栈转储。但是现在我很好奇它是否可能。

RE重复:不,那不是我的问题。我没有问如何在不抛出异常的情况下获得堆栈跟踪。我问,鉴于我遇到了异常,我可以将堆栈跟踪作为数组或其他结构而不是字符串blob。

2 个答案:

答案 0 :(得分:0)

我的网站有两种报告异常错误的选项。

  1. 错误电子邮件
  2. 错误日志表
  3. 错误电子邮件选项可能是最容易实现的。可以根据需要使用电子邮件正文,并从异常对象中提取错误信息。

    在< 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);
}