Получите тот же StackTrace, что и в окне «Стек вызовов» Visual Studio. - PullRequest
0 голосов
/ 16 октября 2018
var newStackTrace = new StackTrace(true);

или устаревшие

var newStackTrace = new StackTrace(Thread.CurrentThread, true);

дают мне StackTrace, который отличается от того, что я вижу в окне "Call Stack" в Visual Studio Pro.ManagedId текущего потока совпадает с тем, который я выбрал в окне «Потоки».Для чего стоит запускать сборки Debug с присутствующими файлами pdb, а источник соответствует сборке.

Откуда Visual Studio получает свой callstack?Что может заставить System.Diagnostics.StackTrace возвращать другой StackTrace для того же потока по сравнению с Visual Studio?

Я читал, что трассировки стека ненадежны, но если бы я мог получить тот же, что и VS,это подойдет мне.

Обновление 1:

Stacktrace от VS:

>   A.S.dll!A.X.BORD.ActivateDebugger(object sender = Name={System.Collections.Generic.Dictionary<string, A.X.BOVar>}; Type=, A.X.ActivateDebuggerEventArgs args = {A.X.ActivateDebuggerEventArgs}) Line 1865   C#
    A.S.dll!A.X.BOHost.Debug(object o = {System.Docu.File.DFF}, int line = 93) Line 259 C#
    System.Docu.File.DFF.dll!<Unknown function> Line 93 Unknown
    A.N.dll!A.N.WC.PB.LoadImageAsync(System.IO.Stream outputStream = {System.Web.HttpResponseStream}) Line 137  C#
    A.C.dll!A.C.W.GIAB(A.N.JS.JSO args = {A.N.JS.JSO}, A.N.JS.JSO result = {A.N.JS.JSO}) Line 452   C#
    [Native to Managed Transition]  
    [Managed to Native Transition]  
    A.N.dll!A.N.CM.AIS.Invoke(System.Reflection.MethodInfo method = {System.Reflection.RuntimeMethodInfo}, object target = {A.C.W}, A.N.JS.JSO[] args = {A.N.JS.JSO[2]}) Line 173   C#
    A.C.dll!A.C.W.ProcessRequest(System.Web.HttpContext context = {System.Web.HttpContext}, System.Collections.Specialized.NameValueCollection responseHeader = {System.Web.HttpHeaderCollection}) Line 210 C#
    A.N.dll!A.N.Http.HTTPH.ExecuteHandler(System.Web.HttpContext context = {System.Web.HttpContext}, string ashx = "<%@ WebHandler Language=\"C#\" Class=\"A.C.W\" %>\r\n", System.Collections.Specialized.NameValueCollection responseHeader = {System.Web.HttpHeaderCollection}) Line 471 C#
    A.N.dll!A.N.Http.HTTPH.ProcessDefaultRequest(System.Web.HttpContext context = {System.Web.HttpContext}, System.Collections.Specialized.NameValueCollection responseHeader = {System.Web.HttpHeaderCollection}) Line 165 C#
    A.N.dll!A.N.Http.HTTPH.ProcessRequest(System.Web.HttpContext context = {System.Web.HttpContext}, System.Collections.Specialized.NameValueCollection responseHeader = {System.Web.HttpHeaderCollection}) Line 374    C#
    App_Code.8jnywgrm.dll!HandlerModule.Application_AuthenticateRequest(object sender = {System.Web.HttpApplication}, System.EventArgs e = {System.EventArgs}) Line 92  C#
    System.Web.dll!System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()    Unknown
    System.Web.dll!System.Web.HttpApplication.ExecuteStepImpl(System.Web.HttpApplication.IExecutionStep step)   Unknown
    System.Web.dll!System.Web.HttpApplication.ExecuteStep(System.Web.HttpApplication.IExecutionStep step = {System.Web.HttpApplication.SyncEventExecutionStep}, ref bool completedSynchronously = false)    Unknown
    System.Web.dll!System.Web.HttpApplication.PipelineStepManager.ResumeSteps(System.Exception error)   Unknown
    System.Web.dll!System.Web.HttpApplication.BeginProcessRequestNotification(System.Web.HttpContext context, System.AsyncCallback cb)  Unknown
    System.Web.dll!System.Web.HttpRuntime.ProcessRequestNotificationPrivate(System.Web.Hosting.IIS7WorkerRequest wr = {System.Web.Hosting.IIS7WorkerRequest}, System.Web.HttpContext context = {System.Web.HttpContext})    Unknown
    System.Web.dll!System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(System.IntPtr rootedObjectsPointer, System.IntPtr nativeRequestContext = 0x0000022413f56d40, System.IntPtr moduleData, int flags)    Unknown
    System.Web.dll!System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(System.IntPtr rootedObjectsPointer, System.IntPtr nativeRequestContext, System.IntPtr moduleData, int flags)   Unknown
    [AppDomain Transition]  

Stacktrace от StackTrace:

   at A.X.BORD.ActivateDebugger(Object sender, ActivateDebuggerEventArgs args) in X:\trunk\Source\S.X.BORD.cs:line 1865
   at A.X.BOHost.Debug(Object o, Int32 line) in X:\trunk\Source\S.X.BOHost.cs:line 259
   at System.Docu.File.DFF.LoadImage(Object sender, LoadImageEventArgs args) in SCRIPTFILE:line 24
   at A.N.WC.PB.LoadImageAsync(Stream outputStream) in X:\trunk\Source.N.WC\PB.cs:line 137
   at A.C.W.GIAB(JSObject args, JSObject result) in X:\trunk\Source.C.W.cs:line 452
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
   at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
   at A.N.CM.AIS.Invoke(MethodInfo method, Object target, JSObject[] args) in X:\trunk\Source.N.CM\AIS.cs:line 173
   at A.C.W.ProcessRequest(HttpContext context, NameValueCollection responseHeader) in X:\trunk\Source.C.W.cs:line 210
   at A.N.Http.HTTPH.ExecuteHandler(HttpContext context, String ashx, NameValueCollection responseHeader) in X:\trunk\Source.N.Http\HTTPH.cs:line 471
   at A.N.Http.HTTPH.ProcessDefaultRequest(HttpContext context, NameValueCollection responseHeader) in X:\trunk\Source.N.Http\HTTPH.cs:line 165
   at A.N.Http.HTTPH.ProcessRequest(HttpContext context, NameValueCollection responseHeader) in X:\trunk\Source.N.Http\HTTPH.cs:line 374
   at HandlerModule.Application_AuthenticateRequest(Object sender, EventArgs e) in X:\trunk\www\WAS\App_Code\HandlerModule.cs:line 92
   at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step)
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
   at System.Web.HttpApplication.PipelineStepManager.ResumeSteps(Exception error)
   at System.Web.HttpApplication.BeginProcessRequestNotification(HttpContext context, AsyncCallback cb)
   at System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context)
   at System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr rootedObjectsPointer, IntPtr nativeRequestContext, IntPtr moduleData, Int32 flags)
   at System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr rootedObjectsPointer, IntPtr nativeRequestContext, IntPtr moduleData, Int32 flags)

Для нашихБольшое сложное приложение, работающее на IIS, сильно отличается (разные кадры стека, номера строк), для программы, указанной ниже, отличается только номер строки:

namespace stacktrace
{
    class Program
    {
        static void Main(string[] args)
        {
            var stacktrace = new System.Diagnostics.StackTrace(true);
        }
    }
}

Обновление 2

Как только "Биты «От родного к нативному / от нативного к управляемому» учитываются, и форматирование игнорируется (здесь мне помогло запутывание стека :-)), стеки по сути такие же, за исключением 3-го кадра сверху;тот, который сообщает "System.Docu.File.DFF".System.Docu.File.DFF.dll - это сборка, сгенерированная нами от пользователя "псевдокод" с помощью отражения.

Я счастлив, что StackTrace нашёл имя-метод / строку и запутался, что VS не ... И это то, с чем мне нужна помощь.

...