c++ - 帮助在 Visual Studio 中调试 C++

标签 c++ visual-studio debugging

这是一个模糊的问题,因此我期待模糊(但希望有帮助)的答案。

我是 C++ 新手,在 Visual Studio 中进行调试,最让我沮丧的是如何解释调用堆栈...

所以我的问题具体是关于我在堆栈顶部看到的错误。这应该说明什么?有人建议代码中抛出异常导致堆栈损坏。这可以由调用堆栈中的 __FrameUnwindFilter(_EXCEPTION_POINTERS*...) 行指示。我该如何解释这里发生的事情?有太多的事情我可能不关心。除此之外,还有一条警告“下面的框架可能不正确和/或丢失”,这是什么意思?我根本不能相信这些台词?为什么首先要展示它?另外,为什么 dddddddd() 位于堆栈帧的底部?

请帮助我 - 我正在寻找有关如何解释堆栈的一般建议和技巧。

谢谢

济南大学

对于一个特定错误,我看到的是:

mscvcr90d.dll!_NMSG_WRITE(...) Line ###

mscvcr90d.dll!abort() Line ## + 0x7 bytes

mscvcr90d.dll!terminate() Line ###

mscvcr90d.dll!__FrameUnwindFilter(_EXCEPTION_POINTERS* ...) Line ####

mscvcr90d.dll!__FrameUnwindToState(EHRegistrationNode * ...) Line ###

mscvcr90d.dll!@_EH4_CallFilterFunc@8() + 0x12 bytes

ntdll.dll!7c9032a8() 

[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll] 

ntdll.dll!7c90327a() 

ntdll.dll 

ntdll.dll 

kernel32.dll 

kernel32.dll 

kernel32.dll 

Other Library 

Other Library

FINALLY MY LIBRARY CODE HERE

END OF MY LIBRARY CODE 

a whole bunch of other libraries here that I haven't heard of 

dddddddd()

最佳答案

这里发生了一些事情。

首先是似乎确实抛出了 SEH 异常。这是由 FrameUnwindToFilter 调用指示的。很难简单地从调用堆栈中确切地说出发生了什么异常。如果您向下移动到该框架并查看参数,其中一个应该有异常代码。

第二项是“下面的帧可能不正确...”当您正在调试不存在符号的 native DLL 时,调试器会显示此消息。由于缺少符号, native 调试器很难(有时甚至是不可能)准确确定调用堆栈。它迫使它猜测,因此警告“可能是错误的”

可以通过加载相关 DLL 的符号来修复此问题。在本例中是 nt.dll 和 kernel32.dll。这些是 Microsoft 拥有的 DLL,其符号是公开可用的。以下 MDN 页面提供了有关如何在计算机上设置公共(public)符号的更多信息

关于c++ - 帮助在 Visual Studio 中调试 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6866215/

相关文章:

c++ - 检查 Mutex 释放

c++ - 使用tolua++时如何让lua获得返回值的所有权?

c - 查找语法错误的问题 - 不确定它是否与视觉代码有关

debugging - 使用 VS Code 和 MSVC 工具链调试 Rust 程序时,如何在 `panic` 处设置断点?

javascript - 无法使用 Node 检查器进行调试 - 出了什么问题?

c++ - 类构造函数中冒号后的参数?

c++ - 不能在 double 上使用模数?

c++ - 如何在没有 CMake 的情况下使用 Visual Studio 2013 设置 Dlib?

c# - Xml 文档中用于 cref 的 Visual Studio Intellisense

java - 为什么我一直收到 "Evaluations must contain either an expression or a block of well-formed statements"?