Visual Studio 和 WinDbg 中的不同调用堆栈
Different call stacks in Visual Studio and WinDbg
在抛出异常时有一个应用程序的小型转储。它独立地提供给 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 显示与主线程相同的调用堆栈吗?
谢谢
您必须先使用 .ecxr
才能获得像 kP:
这样的 exception record data and next run the stack commands
.ecxr ; kP
在抛出异常时有一个应用程序的小型转储。它独立地提供给 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 显示与主线程相同的调用堆栈吗?
谢谢
您必须先使用 .ecxr
才能获得像 kP:
.ecxr ; kP