GDB:断点没有被命中
Posted
技术标签:
【中文标题】GDB:断点没有被命中【英文标题】:GDB : breakpoint does not get hit 【发布时间】:2013-03-21 14:40:18 【问题描述】:我们有一个使用 -g 和 -O 编译器标志编译的大型二进制文件。问题是在使用 gdb 进行调试时,在某些文件/行中设置断点不会在该文件/行中中断或在其他行中中断。我知道这可能是由于 -O 编译器标志(用于优化)。不幸的是,我无法删除编译器 -O 标志,因为我需要注意许多脚本级别。
如何确保在我想要的文件/行位置使代码中断?有没有我可以添加的代码行在使用 gdb 调试时总是不会优化或会中断 - 我试过这样的东西 -
int x; int y;
但是 GDB 断点仍然无法正常工作 - 我该如何正确设置它?
【问题讨论】:
【参考方案1】:我能想到两个问题,内联和优化。由于没有标准方法告诉编译器禁用内联和/或优化,因此您只能以编译器特定的方式执行此操作。
要在 GCC 中禁用内联,您可以在方法上使用 __attribute__((noinline))
。
要禁止编译器优化函数(并且,未经测试,为您提供可以设置断点的稳定代码行),只需将其添加到代码中即可;
asm ("");
这两个都记录在at this page。
【讨论】:
如果想要验证是否发生了这种情况,并且愿意投入工作,请查看 gcc 的-save-temps
选项,它允许检查预处理器和汇编器输出。以上是关于GDB:断点没有被命中的主要内容,如果未能解决你的问题,请参考以下文章
无法调试 - “断点当前不会被命中。没有为此文档加载任何符号”