如何重置 VisualStudio(VS2010、VS2012)调试器缓存?
Posted
技术标签:
【中文标题】如何重置 VisualStudio(VS2010、VS2012)调试器缓存?【英文标题】:How to reset the VisualStudio (VS2010, VS2012) debugger cache? 【发布时间】:2013-07-18 10:31:53 【问题描述】:我正在尝试使用 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
。
【问题讨论】:
关闭优化后是否编译?另外,你是怎么做到的? @LuchianGrigore 我编译时使用了优化 (/Ox
) 和没有优化 (/Od
)。启用优化后,调试器会发疯。 ;-) 我用“清理”和“重新创建”编译?从项目文件夹资源管理器中的项目文件夹(德语“Projektmappe”)中。快捷键是 Ctrl-Alt-F7。
是的,启用优化后,调试器会发疯 - 您看到的代码将被优化,因此调试器将向您展示它可以做什么.. 您不会看到代码单步执行就像在未优化的构建中一样。
@gbjbaanb 澄清一下:所有其他测试中的优化都已关闭。
【参考方案1】:
全文搜索发现了一些 .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文件。
【讨论】:
【参考方案2】:调试信息通常存储在 .pdb 文件中。尝试搜索并删除它们。 在项目属性 > C/C++ > 常规中,调试信息格式设置是什么?尝试在程序数据库(使用 pdb 文件)和 C7 兼容(不确定存储它的位置)之间进行更改,看看会发生什么。
【讨论】:
我删除了解决方案中的所有 pdb 文件,但 vc100.pdb 除外。调试器肯定还有其他地方可以从中获取(错误)信息。 如果您在另一台计算机或 Visual Studio 版本上打开解决方案会发生什么?如果您的项目很简单,您可以尝试创建一个全新的解决方案并包含您的旧文件。否则,我担心你可能不得不重新安装 Visual Studio。或者尝试升级到 2012? 一位同事在同一班的电脑上也遇到了同样的问题。 你能发布课程吗? 不,因为它太复杂了,我无法在演示中重现问题。以上是关于如何重置 VisualStudio(VS2010、VS2012)调试器缓存?的主要内容,如果未能解决你的问题,请参考以下文章