【问题标题】:VS2008 debugger shows incorrect values. How to clean/reset/fix the debugger?VS2008 调试器显示不正确的值。如何清理/重置/修复调试器?
【发布时间】:2014-04-27 04:49:12
【问题描述】:

我的 VS2008 调试器显示几乎所有变量的损坏值。我知道这是不正确的,因为我只是打印了那些给我正确值的值。

以下是其中一些虚假值,

但同时在控制台打印中,

所以,我不明白这里有什么问题。但我认为问题应该出在 Visual Studio 上。有谁知道如何解决这个问题?

更新:这是一个 Qt 应用程序。这是我尝试过的事情:

  • 重建所有项目
  • 删除调试文件夹并重建
  • 从 git repo 获得一份新副本并重建
  • 为 VS2008 安装了 SP1 和所有与 C++ 相关的更新/修补程序

【问题讨论】:

  • 你是在 Release 配置上编译吗?
  • @idanuda 不。正在调试
  • 您是否尝试删除整个 Debug 文件夹?
  • @idanuda 是的,在您询问之后。还是一样,显示虚假值。
  • 如果它没有出现在其他应用程序中,那么这个特定应用程序中的某些设置可能是在打开优化的情况下进行编译。没有什么可以阻止项目启用优化并且仍然是“调试”版本。请检查您正在构建的所有项目,并查看“优化”设置,而不是“调试”或“发布”构建。

标签: c++ visual-studio-2008 qt4 visual-studio-debugging memory-corruption


【解决方案1】:

如果问题未出现在非 Qt 应用程序中,则此特定应用程序中的某些设置可能是在打开优化的情况下进行编译。

它在 Visual Studio 中变得令人困惑,但没有什么能阻止“调试”构建打开优化,以及“发布”构建关闭优化(更常见的是,您会看到关闭优化的发布构建)。

最重要的是,由于未生成调试符号(项目中的另外两个设置在编译和链接期间打开/关闭符号),可能会出现无法调试的“调试”版本。换句话说,“调试开/关”和“优化开/关”的任意组合都可以在“发布”和“调试”构建配置中实现。

由于您正在生成符号,因此问题不在于未生成符号。因此,请检查您正在构建的所有项目,并查看“优化”设置,而不是配置名称是“调试”还是“发布”。

【讨论】:

  • 来自 msdn 当编译器优化代码时,它会重新定位和重新组织指令,从而产生更高效的编译代码。由于这种重新排列,调试器无法始终识别对应于一组指令的源代码。优化会影响: 局部变量,可以被优化器删除或移动到调试器不理解的位置。函数内的位置,当优化器合并代码块时会更改。调用堆栈上帧的函数名称,如果优化器合并两个函数,则可能是错误的。
猜你喜欢
  • 2012-07-21
  • 1970-01-01
  • 2018-07-08
  • 2020-01-08
  • 2010-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-13
相关资源
最近更新 更多