GDB:断点不受打击

时间:2013-03-21 14:40:19

标签: gdb

我们有一个使用-g和-O编译器标志编译的大型二进制文件。问题是在使用gdb进行调试时,在某些文件/行中设置断点不会在该文件/行中断或在某些其他行中断。我知道这可能是由于-O编译器标志(用于优化)。不幸的是,我无法删除编译器-O标志,因为我需要注意许多脚本级别。

如何确保在我想要的文件/行位置进行代码分解?是否有一行我可以添加的代码总是没有优化,或者在使用gdb调试时会中断 - 我试过这样的事情 -

int x; int y;

但是GDB断点仍然无法正常工作 - 我该怎样才能正确设置?

1 个答案:

答案 0 :(得分:1)

我可以想到两个问题,内联和优化。由于没有标准方法告诉编译器禁用内联和/或优化,因此您只能以编译器特定的方式执行此操作。

要在GCC中禁用内联,您可以在方法上使用__attribute__((noinline))

要禁止编译器优化函数(并且未经测试,给出一个稳定的代码行,您可以在其中设置断点),只需将其添加到代码中;

asm ("");

这两个都记录在案at this page