断点未命中

Breakpoint not hitting

本文关键字:断点      更新时间:2023-10-16

我将一个应用程序从VC6移植到VS 2008。我在发布版本中重建了应用程序。 Pdb 文件在 exe 所在的文件夹中可用。 但是当我加载应用程序并放置断点时,我收到以下消息

"断点目前不会被命中。尚未加载此文档的符号"

问题的原因是什么?

调试器找不到应用程序或 PDB。

启动程序时,"输出"窗口中会显示准确加载的二进制文件。 确保加载了正确的文件。 当一切正确加载时,输出如下所示:

"hacks_vs10.exe":已加载 'C:\Users\john\Documents\Visual Studio 2010\项目\hacks_vs10\x64\调试\hacks_vs10.exe', 已加载符号。

当找不到 PDB 时,它不是说"已加载符号",而是说:

找不到或打开 PDB 文件

请确保首先运行正确版本的应用程序(检查运行路径),然后确保 PDB 位于该目录中。您可以通过调整"项目>属性...>链接器>生成程序数据库文件"来更改生成 PDB 的位置

调试器找不到与放置断点的源位置关联的代码。

这可能有很多原因。我最常发现的是一段真正没有编译的代码。(由于预处理器条件或死代码删除)。

我想也可能有其他原因(例如内联,尽管理论上,编译器可以为所有内联生成正确的映射。我不知道VS2008在这里做什么)。

您确定要将断点放在应该执行的代码路径中吗?

您提到的 PDB 文件可能与发布版本无关,

发布版本中通常没有调试信息(尽管您可以在必要时启用它,但应该预期由于编译器优化而产生令人惊讶的效果)。

因此,您只能在已知的 DLL 入口点上设置断点(可以通过模块列表视图 - 自从我大量使用 Visual Studio 以来已经有一段时间了)或直接在程序集指令上设置断点。

请注意,您可以使用调试符号编译应用程序的一部分。

我刚刚解决了类似的问题

  • 重新引用了我所有的 DLL
  • 转到(工具->选项、"项目和解决方案"、"生成并运行")并将"项目过期时运行时"设置为"提示生成"

我不确定其中哪一个解决了问题,但它确实解决了!