1

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

如何确保在我想要的文件/行位置使代码中断?有没有我可以添加的代码行在使用 gdb 调试时总是不会优化或会中断 - 我试过这样的东西 -

诠释 x; 整数y;

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

4

1 回答 1

1

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

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

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

asm ("");

这两个都记录在这个页面上

于 2013-03-21T14:54:42.943 回答