【问题标题】:Different call stacks in Visual Studio and WinDbgVisual Studio 和 WinDbg 中的不同调用堆栈
【发布时间】:2016-01-18 12:18:44
【问题描述】:

在抛出异常的那一刻有一个应用程序的迷你转储。它独立提供给 Visual Studio 2013 和 WinDbg。这两个工具都配置为正确加载调试符号。事实上,除了主线程之外的所有线程的调用堆栈都是一样的。

问题出在引发异常的主线程上。

Visual Studio 2013 正确显示为

KERNELBASE.dll!_RaiseException@16()  + 0x58 bytes   
msvcr120.dll!_CxxThrowException(void * pExceptionObject, const _s__ThrowInfo * pThrowInfo)  Line 152 + 0x13 bytes   C++
AlignUtils.dll!genPresume(int i_line, const char * i_file, const char * i_expr)  Line 17 + 0x30 bytes   C++
FiPosShared.dll!FiPosShared_NS::InclinationFunction::fix(const Math_NS::RigidTransform<double> & toothXform, double targetAngle)  Line 68 + 0x1db bytes C++
FiPosShared.dll!FiPosShared_NS::InclinationFunction::dTorque_dInclination(const Math_NS::RigidTransform<double> & i_param, const Math_NS::RigidTransform<double> & i_base)  Line 88 + 0x33 bytes    C++
kernel32.dll!_HeapFree@12()  + 0x14 bytes   
msvcr120.dll!free(void * pBlock)  Line 51   C
00000005()  
...

但是 WinDbg 显示的东西完全不同:

ntdll!NtGetContextThread+0x12
KERNELBASE!CloseHandle+0x2d
kernel32!CloseHandleImplementation+0x3f
dbghelp!Win32LiveSystemProvider::OpenMapping+0x1fe
0xd100000
ntdll!RtlpFreeHeap+0xbb1
ntdll!RtlFreeHeap+0x142
KERNELBASE!CloseHandle+0x2d
atiadlxy+0x10004
0x24548dc9
0x15ff6404

你知道哪里出了问题以及如何让 WinDbg 显示与主线程相同的调用堆栈吗?

谢谢

【问题讨论】:

  • 你能告诉我们你是如何加载符号的吗?你.reload /f了吗?
  • 如果你运行 .ecxr 会发生什么; kP?
  • 是的,我在 WinDbg 中尝试过.reload /f。结果和没有这个命令一样。
  • 你是如何得到堆栈的?
  • @Thomas,在 WinDbg 中我按下了“调用堆栈”按钮 (Alt+6)。

标签: debugging visual-studio-2013 windbg debug-symbols crash-dumps


【解决方案1】:

您必须先使用.ecxr 来获取exception record data,然后再运行stack commands,例如kP:

 .ecxr ; kP

【讨论】:

  • !analyze -v 或其他东西也应该显示一个好的堆栈,或者不是?这解决了 OP 的问题,但错误是什么?
  • @Thomas 我不知道他是如何获得堆栈的。我们必须等待他对您的评论的回复
猜你喜欢
  • 2011-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-09
  • 2016-04-26
  • 2012-07-24
  • 2016-10-06
相关资源
最近更新 更多