2009-02-12 127 views
17

当我要在VS2005中调试C++程序时,程序并没有停在 的断点处。为什么我不能调试?

VS表示“没有符号加载任何调用堆栈帧,源代码不能显示”。

我该怎么办?

+0

你在调试一个exe或dll吗? – 2009-02-12 09:01:52

+0

意外地杀死“mspdbsrv.exe”后,发生在我身上。杀死devenv.exe的孩子是我有时用来阻止monstruos构建的方法,当“取消构建”无响应时。 – Liviu 2014-09-08 13:32:40

+0

尝试了解另一个实例(例如,您的应用程序的发布版本)是否在后台运行! – 2015-04-21 17:09:20

回答

19

感谢大家。

最后,我找到了解决方案here

要启用调试:

1)转到项目 - >的HelloWorld属性

2)在左侧展开 “配置属性”

3)展开 “C/C++”

4)在左侧,选择“常规”

5)在右侧,将“调试信息格式”到 “节目数据库编辑并继续(/ ZI)”

5)在左侧,选择 “优化”

6)在右侧,变化 “优化” 为 “Disabled(/ OD)”

7)在左侧,展开 “链接”

8)在左侧,选择 “调试”

9)在右侧,变化 “生成调试信息”,以 “是”

10)单击确定

11)设置断点

12)运行你的应用程序使用Ctrl + F5来构建和运行它的时候重新构建应用程序

而且,这保持控制台窗口打开足够长的时间你看到你的输出。

1

这听起来像你附加到一个进程而不是运行传统的调试会话?如果确实附加到进程中,确保您尝试调试的二进制文件是使用当前在IDE中打开的相同源代码构建的,这一点非常重要。

+0

错误的源代码仍然应该中断,只是在源代码中的奇怪位置。如果没有中断,这可能是一个符号问题,而不是源代码问题。 – 2009-02-12 09:00:59

+0

如果源代码与不会中断的源代码相同(我已经注意到了这一行为) – 2009-02-12 09:11:01

3

无论出于何种原因,您在符号路径中没有正确的符号(.pdb文件)。这可能有以下几个原因:

1)您的二进制文件比.pdb文件更近编译。尝试重新编译一切。

2)您正试图调试.dll并忘记复制.pdb文件。也复制这些文件。

也有可能你的代码没有像你想象的那样被执行。

1

彻底清理并重建,确保.pdb被创建?

4

几个步骤来尝试:进入

  1. 调试 - >步骤(这将确保你停止启动后右)
  2. 调试 - > Windows的>模块
  3. 查找您的FOO。 exe列表中。
  4. 检查符号状态。它是否说它已加载?
  5. 如果没有,去的道路,并确保: 一)有一个名为foo.pdb有 二)文件上foo.pdb时间戳匹配foo.exe的(或非常接近)
0

我尝试调试我的单元测试时遇到过这个问题(在VS中使用c#)。

您可以添加以下代码,将启动调试器,将允许您通过您的代码哟一步像正常的新实例:

System.Diagnostics.Debugger.Launch(); 
System.Diagnostics.Debugger.Break(); 
0

我想补充的MainID尚未覆盖的另一种可能性:

调试时,我竟开始有些程序会调用到我要调试的类(这是某种加上的)。被调用的程序部分用非托管C++编写。当我选中“启用非托管代码调试”时,错误会出现(随后程序崩溃),因为程序没有任何调试信息。

0

我已经这样做在WP7解决了这个问题:

  1. 右击从Solution Explorer中的项目(按Ctrl + W + S
  2. 选择重建。
  3. 再次,选择该项目,右键单击它并选择部署。
  4. 开始调试(F5)

我希望它会帮助你的!

相关问题