如何使用Microsoft.Diagnostics.Runtime获取有关StackTrace中方法的信息?

时间:2016-10-26 06:16:57

标签: c# clrmd

代码:

using System.Diagnostics;
using System.Linq;
using Microsoft.Diagnostics.Runtime;
using Microsoft.Diagnostics.Runtime.Utilities;
using Microsoft.Diagnostics.Runtime.Utilities.Pdb;

namespace myDiagnostics
{
    public class myStackTraceInfo
    {
        public void Atach()
        {
            using (DataTarget target = DataTarget.AttachToProcess(Process.GetCurrentProcess().Id, 5000, AttachFlag.Passive))
            {
                ClrRuntime runtime = target.ClrVersions.First().CreateRuntime();
                foreach (ClrThread thread in runtime.Threads)
                {
                    foreach (ClrStackFrame frame in thread.StackTrace)
                        Console.Write(frame.Method.ToString());
                }
            }
        }
    }
}

结果,我得到的不是方法名称 - “UNKNOWN”。但in方法是字段“InstructionPointer”,也许它会提供更多信息?

1 个答案:

答案 0 :(得分:1)

UNKNOWN表示该方法没有与之关联的托管方法。尝试将它附加到其他进程,也可以遍历所有堆栈中的所有帧,我确定你会找到一些东西。

Here你可以找到一个转储堆栈的工作示例,包括堆栈对象。

Example of dump stack