首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >来自C#的打印堆栈跟踪信息

来自C#的打印堆栈跟踪信息
EN

Stack Overflow用户
提问于 2008-09-09 12:45:34
回答 5查看 46.8K关注 0票数 51

作为我们产品中一些错误处理的一部分,我们想要转储一些堆栈跟踪信息。然而,根据我们的经验,许多用户会简单地截取错误消息对话框的屏幕截图,而不是向我们发送程序提供的完整报告的副本,因此我想在此对话框中提供一些最小的堆栈跟踪信息。

我的机器上的.NET堆栈跟踪如下所示:

代码语言:javascript
复制
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options)
at System.IO.StreamReader..ctor(String path, Encoding encoding, Boolean detectEncodingFromByteOrderMarks, Int32 bufferSize)
at System.IO.StreamReader..ctor(String path)
at LVKWinFormsSandbox.MainForm.button1_Click(Object sender, EventArgs e) in C:\Dev\VS.NET\Gatsoft\LVKWinFormsSandbox\MainForm.cs:line 36

我有这个问题:

格式看起来像这样:

代码语言:javascript
复制
at <class/method> [in file:line ##]

但是,at和in关键字,我假设如果它们运行的是挪威的.NET运行时,而不是我安装的英语运行时,这些关键字将被本地化。

有没有办法让我以一种与语言无关的方式拆解这个堆栈跟踪,这样我就可以只显示包含它的那些条目的文件号和行号?

换句话说,我想从上面的文本中获得以下信息:

代码语言:javascript
复制
C:\Dev\VS.NET\Gatsoft\LVKWinFormsSandbox\MainForm.cs:line 36

你能给出的任何建议都会很有帮助。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2008-09-09 13:01:01

您应该能够通过输入以下命令来获取StackTrace对象而不是字符串

代码语言:javascript
复制
var trace = new System.Diagnostics.StackTrace(exception);

然后,您可以自己查看框架,而不依赖于框架的格式。

另请参阅:StackTrace reference

票数 71
EN

Stack Overflow用户

发布于 2009-08-06 14:08:49

下面是我在没有异常的情况下执行此操作的代码

代码语言:javascript
复制
public static void LogStack()
{
  var trace = new System.Diagnostics.StackTrace();
  foreach (var frame in trace.GetFrames())
  {
    var method = frame.GetMethod();
    if (method.Name.Equals("LogStack")) continue;
    Log.Debug(string.Format("{0}::{1}", 
        method.ReflectedType != null ? method.ReflectedType.Name : string.Empty,
        method.Name));
  }
}
票数 28
EN

Stack Overflow用户

发布于 2011-05-22 21:26:59

这只是一个15秒的复制粘贴答案:

代码语言:javascript
复制
static public string StackTraceToString()
{
    StringBuilder sb = new StringBuilder(256);
    var frames = new System.Diagnostics.StackTrace().GetFrames();
    for (int i = 1; i < frames.Length; i++) /* Ignore current StackTraceToString method...*/
    {
        var currFrame = frames[i];
        var method = currFrame.GetMethod();
        sb.AppendLine(string.Format("{0}:{1}",                    
            method.ReflectedType != null ? method.ReflectedType.Name : string.Empty,
            method.Name));
    }
    return sb.ToString();
}

(基于林德霍尔姆的回答)

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档