异常时无法正确获取调用堆栈

Posted

技术标签:

【中文标题】异常时无法正确获取调用堆栈【英文标题】:Cannot Get Call Stack Correctly on Exception 【发布时间】:2018-10-16 10:02:02 【问题描述】:

我正在使用 Visual C++ 2008 编写一个自动化 Word 应用程序。我设置了调试器,以便它会在 CException 和 COleException 上中断。在调试的时候,有时我会在以下异常处中断:

MyApp.exe 中 0x7641c54f 处的第一次机会异常:Microsoft C++ 异常:内存位置 0x068cdbe0 处的 COleException。

此时断点在函数_malloc_dbg中,当我查看调用堆栈时,会得到如下:

它说“下面的帧可能不正确和/或丢失,没有为 KernelBase.dll 加载符号”。但是我的程序是使用调试配置构建的。异常时如何获取调用栈?

谢谢

【问题讨论】:

【参考方案1】:

由于您使用的是 VS 2008,不确定这是否有帮助,但请查看:Symbols for kernelbase.dll could not be downloaded - UWP, Release build only, after Windows 10 update

据我所知,您正在使用符号和调试信息构建应用程序,但使用的核心库(在本例中为 KernelBase.dll)不是使用调试符号构建的。您需要获取或启用 KernelBase.dll 的调试符号。

编辑:https://social.msdn.microsoft.com/Forums/vstudio/en-US/9a95bb8f-b263-4b0c-ae9c-35023c210a11/kernelbasepdb-not-included?forum=vsdebug 看来你需要kernelbase.pdb

【讨论】:

以上是关于异常时无法正确获取调用堆栈的主要内容,如果未能解决你的问题,请参考以下文章

C# 捕获堆栈溢出异常

StackTraceElement获取方法调用栈的信息

在异常对象上调用 std::move 是不是正确?

由于递归方法调用导致 Java 堆栈溢出

调用 SSPI 失败,请参见内部异常。接收到的消息异常,或格式不正确。

在c#中使用单一方法会发生***异常吗?