Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 有没有办法将.net堆栈跟踪作为数组获取?_Asp.net_Exception_Stack Trace - Fatal编程技术网

Asp.net 有没有办法将.net堆栈跟踪作为数组获取?

Asp.net 有没有办法将.net堆栈跟踪作为数组获取?,asp.net,exception,stack-trace,Asp.net,Exception,Stack Trace,当asp.net抛出异常时,异常对象包含堆栈跟踪属性,但它是一个大的长字符串。有没有一种方法可以将其作为数组或其他可以通过编程进行检查的结构 我眼前的问题是,我有一个错误,显示在一个管理功能,现在,然后。它很难复制,所以我想说,当它发生时,我捕获异常并在堆栈中搜索代码中的最低级别语句并显示它,而不是转储整个堆栈。好吧,也许这比它的价值更麻烦,我应该转储堆栈,找到并修复错误,然后删除堆栈转储。但现在我很好奇这是否可能 重复:不,这不是我的问题。我不是问如何在不引发异常的情况下获取堆栈跟踪。我在问,

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

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


重复:不,这不是我的问题。我不是问如何在不引发异常的情况下获取堆栈跟踪。我在问,如果我捕获了一个异常,我可以将堆栈跟踪作为数组或其他结构而不是字符串块来获取。

我的网站有两个选项用于报告异常错误

  • 错误电子邮件
  • 错误日志表
  • 错误电子邮件选项可能是最容易实现的。电子邮件正文可以任意长,并从异常对象提取错误信息


    在web.config文件的节中将错误电子邮件通讯组列表定义为逗号分隔的字符串,有助于将来更新网站错误通知人和未通知人。

    我的网站有两个选项用于报告异常错误

  • 错误电子邮件
  • 错误日志表
  • 错误电子邮件选项可能是最容易实现的。电子邮件正文可以任意长,并从异常对象提取错误信息


    在web.config文件的节中将错误电子邮件分发列表定义为逗号分隔的字符串,有助于将来更新网站错误通知人和未通知人。

    出现异常时,最好自己发送电子邮件。通过这种方式,您可以更轻松地阅读电子邮件,并且永远不会错过错误

    C#:

    最后,这里是如何发送电子邮件:

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

    最好的办法是在出现异常时给自己发电子邮件。通过这种方式,您可以更轻松地阅读电子邮件,并且永远不会错过错误

    C#:

    最后,这里是如何发送电子邮件:

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

    System.Diagnostics.StackTrace
    可能重复?可能重复
    System.Diagnostics.StackTrace
    ?是的,我在其他几个应用程序中都做过。但我的问题不是如何“交付”堆栈跟踪,而是我想让一个程序操纵它并取出最有可能感兴趣的部分。正如我在最初的问题中所说的,可以说这是浪费时间,我会花更多的时间编写代码来检查堆栈跟踪,然后只是观察它并找出我需要什么,直到我解决了问题。但我开始思考,即使在这种特殊情况下,这不是最好的解决方案,也许知道如何做是一件好事,以供将来参考。您提出了一个很好的观点,即创建自定义代码以显示堆栈跟踪以供日后分析的努力与回报。对于我的网站来说,及时且信息丰富的错误电子邮件是值得付出努力的。用于生成这些电子邮件的方法在不断发展。您的里程数可能会有所不同。是的,我在其他几个应用程序中也这样做过。但我的问题不是如何“交付”堆栈跟踪,而是我想让一个程序操纵它并取出最有可能感兴趣的部分。正如我在最初的问题中所说的,可以说这是浪费时间,我会花更多的时间编写代码来检查堆栈跟踪,然后只是观察它并找出我需要什么,直到我解决了问题。但我开始思考,即使在这种特殊情况下,这不是最好的解决方案,也许知道如何做是一件好事,以供将来参考。您提出了一个很好的观点,即创建自定义代码以显示堆栈跟踪以供日后分析的努力与回报。对于我的网站来说,及时且信息丰富的错误电子邮件是值得付出努力的。生成这些电子邮件的方法在不断发展。你的里程数可能会有所不同。