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 не ... И это то, с чем мне нужна помощь.