提问人:MainID 提问时间:2/12/2009 最后编辑:Steve RoweMainID 更新时间:7/4/2013 访问量:68553
为什么我无法调试?
Why can't I debug?
问:
当我准备在VS2005中调试C++程序时,程序并没有停在 断点。
VS 说:“任何调用堆栈帧都不会加载任何符号。源代码无法显示”。
我能做些什么?
答:
这听起来像是附加到一个进程,而不是运行一个传统的调试会话?如果确实要附加到进程,请务必确保尝试调试的二进制文件是使用当前在 IDE 中打开的相同源代码生成的。
评论
无论出于何种原因,符号路径中没有正确的符号(.pdb 文件)。这可能有几个原因:
1) 二进制文件的编译时间比 .pdb 文件更新。尝试重新编译所有内容。
2)您正在尝试调试.dll,但忘记复制.pdb文件。也复制这些文件。
也有可能你的代码没有像你想象的那样被执行。
完全清理和重建,确保创建 .pdb?
尝试几个步骤:
- 调试->单步执行(这将确保在启动后立即停止)
- 调试 >Windows->模块
- 在列表中查找您的 foo.exe。
- 检查符号状态。它说它已加载吗?
- 如果没有,请转到路径并确保: a) 那里有一个名为 foo.pdb 的文件 b) foo.pdb 上的时间戳与 foo.exe 匹配(或非常接近)
评论
我在尝试调试单元测试时遇到了这个问题(在 VS 中使用 c#)。
可以添加以下代码,这些代码将启动调试器的新实例,使你能够像往常一样单步执行代码:
System.Diagnostics.Debugger.Launch();
System.Diagnostics.Debugger.Break();
评论
谢谢大家。
最后,我在这里找到了解决方案。
要启用调试,请执行以下操作:
1) 转到 Project->HelloWorld 属性
2) 在左侧展开“配置属性”
3) 扩展“C/C++”
4) 在左侧,选择“常规”
5) 在右侧,将“调试信息格式”更改为“Program Database For Edit And Continue (/ZI)”
5)在左侧,选择“优化”
6) 在右侧,将“优化”更改为“禁用 (/Od)”
7) 在左侧,展开“链接器”
8) 在左侧,选择“调试”
9) 在右侧,将“生成调试信息”更改为“是”
10) 单击确定
11) 设置断点
12) 重新构建应用程序
此外,在运行应用程序时,请使用 Ctrl+F5 生成并运行它,这将使控制台窗口保持打开足够长的时间,以便你能够看到输出。
评论
只是为了添加 MainID 尚未涵盖的另一种可能性:
调试时,我实际上启动了一些程序,这些程序会调用我想要调试的类(它是某种附加组件)。被调用的程序部分是用非托管 C++ 编写的。当我选中“启用非托管代码调试”时,会出现错误(随后程序崩溃),因为程序没有任何调试信息。
我通过这样做在WP7中解决了这个问题:
- 右键单击“解决方案资源管理器”(Ctrl+W+S)
- 选择“重新生成”。
- 再次选择项目,右键单击它,然后选择 Deploy。
- 开始调试 (F5)
希望对您有所帮助!
下一个:如何制作出色的 R 可重现示例
评论