如何重置VisualStudio(VS2010,VS2012)调试器缓存?

时间:2013-07-18 10:31:54

标签: c++ visual-studio qt debugging

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

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

问题:

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

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

以下是我的尝试:

  • 重新启动Visual Studio
  • 清理并重建了我的项目文件夹
  • 尝试了不同的项目设置(例如,再次启用和关闭优化)
  • 手动删除.obj文件
  • 手动删除.sdf文件
  • 重新排序班级中的成员
  • 从班级中删除了大部分Qt代码 编辑:
  • 正如Neil Kirk在回答中建议的那样,我尝试了编译器选项/ Z7,/ Zi和/ ZI。
    / Z7应该将调试信息写入目标文件。
  • 删除了所有./Debug目录中的所有内容

调试器必须从其他来源获取其信息。但是从哪里来?

我需要做些什么才能使调试器清除其缓存,重新扫描我的类并更新其内部信息?


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


VS2012问题仍然存在。不过,pdb文件现在名为vc110.pdb

2 个答案:

答案 0 :(得分:3)

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

我删除了所有找到的.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.

修改

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

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

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


<强> VS2012

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

答案 1 :(得分:2)

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