代码之家  ›  专栏  ›  技术社区  ›  tmighty

为什么调用堆栈不显示以前的调用?

  •  1
  • tmighty  · 技术社区  · 2 年前

    在我的VS2022 C++项目中,一段时间后出现了问题。 因为错误只在10分钟后发生,所以我需要检查调用堆栈,看看在错误发生之前发生了什么。

    但是,调用堆栈太小。

    它只是显示了这一点:

    enter image description here

    我已经手动设置了断点来跟踪它,所以我知道在“ProcessTxtLine”(调用堆栈中显示)之前有几个我自己的函数,但在调用堆栈中它们不存在。 所以我不能为了快速到达那里而双击它们。

    因为我不知道还有什么可能是重要的,我发布了一张我整个VS 2022窗口的截图。

    非常感谢。

    enter image description here

    编辑:

    根据建议,我点击了第一个条目,然后选择了“加载符号”。

    然而,这无济于事。它确实显示了更多,但仍然不是“我的”呼叫。

    enter image description here

    1 回复  |  直到 2 年前
        1
  •  6
  •   Chronial    2 年前

    调用堆栈中的消息是相关提示:您需要加载更多的调试符号才能正确显示调用堆栈。您可以右键单击调用堆栈中的第一个条目( KernelBase.dll... 行),然后选择“加载符号”。您可能需要为更多的模块加载符号,但应该会收到新的消息来告诉您这一点。

    此问题是32位应用程序独有的。由于32位调用约定的工作方式,不可能为所有最顶层的堆栈条目生成没有调试符号的调用堆栈。如果您将应用程序编译为64位,那么这个问题就会消失。