2

我正在尝试使用 Qt 调试一个大型项目,但我在调试时遇到了问题。这与这个问题相同,但那里的答案没有帮助,我使用的是 VS2010,所以我无法安装那里提到的修复程序。
我用 VS2008 重现了这个问题(以及解决方案,见下文)。

我刚刚了解到:“鼠标悬停”功能称为 DataTips。

问题:

  • 成员变量的鼠标悬停和“本地”窗口内容错误(与上面链接的问题相比)。
  • 鼠标悬停和“本地”窗口内容显示旧成员名称。我将一个变量从“size”重命名为“sizeMm”,调试器仍然显示“size”。

显然,调试器正在使用一些必须存储在某处的旧信息。

这是我尝试过的:

  • 重新启动 Visual Studio
  • 清理并重建了我的项目文件夹
  • 尝试了不同的项目设置(例如再次打开和关闭优化)
  • 手动删除 .obj 文件
  • 手动删除 .sdf 文件
  • 对班级中的成员进行了重新排序

  • EDIT 类中删除了大部分 Qt 代码:
  • 正如 Neil Kirk 在回答中建议的那样,我尝试了编译器选项 /Z7、/Zi 和 /ZI。
    /Z7 应该将调试信息写入目标文件。
  • 删除所有 ./Debug 目录中的所有内容

调试器必须从另一个来源获取信息。但从哪里来?

我该怎么做才能让调试器清除它的缓存、重新扫描我的类并更新它的内部信息?


当前调查状态:
我发现了大约 6 个可能存在信息的地方,例如ipch文件夹/文件。但仍然没有成功。
我对每个硬盘进行了全文搜索。它在我删除的其他项目中发现了一些 pdb 文件。
现在我修复了这个错误,但我没有找到它。


VS2012 问题依然存在。但是,pdb 文件现在命名为vc110.pdb

4

2 回答 2

3

全文搜索发现了一些.pdb文件(主要是 vc100.pdb),部分位于链接到同一个库的其他项目的目录中,其中包含旧的符号名称。

我删除了所有找到的.pdb(和.idb)文件,重新编译,现在它再次显示正确的行为。

遇到同样问题的人应该尝试这个解决方案。

//Yet I have no answers as to
//- where exactly the debugger searches for its information and
//- in which way the pdb files are (re)created and interconnected and
//- how the problem came to be in the first place.

编辑

我能够重现问题。我想我知道发生了什么:

我包含了几个基于公共基础库的库。如果我重建它们,基本库中的更改只会反映在其他包含的库中。如果在基本库中进行一些细微更改(在我的情况下:向类中添加成员)之后我不重建这些库,则相应的vc100.pdb文件保持不变。因为包含路径设置为该库的目录,所以它的 vc100.pdb 文件似乎被 VS 调试器使用。

解决方案是删除这些 vc100.pdb 文件或重建所有库。


VS2012

文件名因版本而异。VS2012使用vc110.pdb等等。我现在删除代码目录+子目录中的所有 *.pdb 文件。

于 2013-07-19T12:07:40.333 回答
2

调试信息通常存储在 .pdb 文件中。尝试搜索并删除它们。在项目属性 > C/C++ > 常规中,调试信息格式设置是什么?尝试在程序数据库(使用 pdb 文件)和 C7 兼容(不确定存储它的位置)之间进行更改,看看会发生什么。

于 2013-07-18T11:40:50.790 回答