Как получить ветку «Расположение» / StackTrace в коде? - PullRequest
0 голосов
/ 08 января 2019

У меня есть этот код (использующий CLRMD ) в настоящее время, чтобы попытаться получить трассировку стека:

var pid = Process.GetCurrentProcess().Id;
using (var dataTarget = DataTarget.AttachToProcess(pid, 5000, AttachFlag.Passive))
    {
        ClrInfo currentRuntime = dataTarget.ClrVersions[0];
        var runtime = currentRuntime.CreateRuntime();

        Debug.Print("Stack Traces:");
        foreach (var t in runtime.Threads)
        {
            if (t.ManagedThreadId == 1)
            {
                foreach(var f in t.EnumerateStackTrace())
                {
                    Debug.Print(f.Method?.GetFullSignature());
                }
            }
        }
        Debug.Print("");
    }

И распечатывает это:

System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.DispatcherFrame)
System.Windows.Threading.Dispatcher.PushFrame(System.Windows.Threading.DispatcherFrame)
System.Windows.Application.RunDispatcher(System.Object)
System.Windows.Application.RunInternal(System.Windows.Window)
System.Windows.Application.Run(System.Windows.Window)
System.Windows.Application.Run()
App.App.Main(System.String[])

Но когда я открываю вкладку threads в разделе отладки в Visual Studio, я вижу гораздо более информативную вкладку Location, которая имеет следующее:

App.exe!App.ViewModels.SomethingSomethingViewModel.SomethingHandler
App.exe!App.ViewModels.SomethingSomethingParentViewModel.SomethingCommandHandler() Line 110
App.exe!App.Utilities.AsyncRelayCommand.ExecuteAsync(object parameter) Line 55...

Как получить трассировку стека с информацией о вкладке местоположения? Visual studio показывает это отлично, но я не могу понять, как получить к нему доступ через код, чтобы я мог отправить его в виде журнала ...

...