【问题标题】:Getting additional call function information with debugdiag使用 debugdiag 获取额外的调用函数信息
【发布时间】:2014-01-21 16:57:47
【问题描述】:

我正在使用带有 .dmp 文件的 debugdiag 1.2。我一直在与 Microsoft 支持部门合作,我们得到了不同的函数跟踪详细信息 - 他的版本在函数名称和参数方面更加冗长。

我想知道我是否缺少一些东西才能得到和他一样的东西?

例如,我会得到:

ntdll!NtWaitForMultipleObjects+a    
KERNELBASE!WaitForMultipleObjectsEx+e5    
clr!WaitForMultipleObjectsEx_SO_TOLERANT+62    
clr!Thread::DoAppropriateAptStateWait+53    
clr!Thread::DoAppropriateWaitWorker+186    
clr!Thread::DoAppropriateWait+7d    
clr!WaitHandleNative::CorWaitOneNative+151    
mscorlib_ni+509aa4    
0x000007fd`231e0e5c    
mscorlib_ni+4efd85    
mscorlib_ni+4efae9    
mscorlib_ni+4efaa7    
mscorlib_ni+d529ad 

对于同一个转储文件,他会得到:

ntdll!ZwWaitForMultipleObjects+a 
KERNELBASE!WaitForMultipleObjectsEx+e5 
clr!WaitForMultipleObjectsEx_SO_TOLERANT+62 
clr!Thread::DoAppropriateAptStateWait+53 
clr!Thread::DoAppropriateWaitWorker+186 
clr!Thread::DoAppropriateWait+7d 
clr!WaitHandleNative::CorWaitOneNative+151 
mscorlib_ni!System.Threading.WaitHandle.InternalWaitOne(System.Runtime.InteropServices.SafeHandle, Int64, Boolean, Boolean)+14 
FiftyOne_Foundation!Unknown+3c 
mscorlib_ni!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)+285 
mscorlib_ni!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)+9 
mscorlib_ni!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)+57 
mscorlib_ni!System.Threading.ThreadHelper.ThreadStart(System.Object)+5d 

DebugDiag 看起来是一个非常有用的工具——我非常想对它有一个很好的了解。提前感谢您的宝贵时间。

【问题讨论】:

    标签: waitformultipleobjects debugdiag


    【解决方案1】:

    不同之处在于 Microsoft 支持使用内部 PRIVATE SYMBOLS,当您使用带有 PRIVATE 符号的调试诊断工具时,报告中显示的 NATIVE 堆栈更加准确和更好,因为调试器 (dbgeng. dll 和 dbghelp.dll 具体来说)能够找出托管函数的名称,并且它们在本机堆栈中显示这些名称,就好像它们是本机函数一样,但是如果我们使用 PUBLIC 符号(来自 msdl.microsoft.com)进行分析转储,这些函数名称不会显示在本机堆栈部分下的调试诊断报告中。

    您应该仍然能够在报告中线程的 MANAGED 调用堆栈下看到正确的函数名称

    我还可以看到转储中加载的 CLR 是 4.0 或更高版本,因此如果您使用专门针对 4.0 及更高版本框架运行时编写的 Debug Diagnostic 2.0,您将在报告中获得更好的堆栈。可以从http://www.microsoft.com/en-us/download/details.aspx?id=40336下载

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-12
      • 2019-07-30
      • 1970-01-01
      • 2023-03-13
      • 2011-11-25
      • 2018-12-12
      • 2012-08-01
      • 2018-03-26
      相关资源
      最近更新 更多