我想知道我是否可以得到一个gcc选项的列表,可以导致gdb的行为奇怪。当然,我们都知道使用优化选项(例如-O3)会导致gdb中出现奇怪的行为,但是还有哪些选项会产生这样的影响呢?(我目前正在尝试在gdb中运行一个mpeg 2解码器,即使在删除优化标志后,我也会得到奇怪的行为...)
9udxz4iz1#
我认为很难说在调用gcc进行调试时不应该使用什么标志。gcc docs注意到libstdc++构建的默认调试标志是-g和-O2,使用-g -O0 -fno-inline将禁用任何优化和函数内联。在我看来,如果你真的想保证没有什么会扰乱你的调试过程,你只需要编译-g -O0 -fno-inline标志。
-g
-O2
-g -O0 -fno-inline
wgeznvg72#
如GCC documentation中所述,您应该使用-Og:-Og优化调试体验。-Og支持不干扰调试的优化。它应该是标准编辑-编译-调试周期的优化级别选择,提供合理的优化级别,同时保持快速编译和良好的调试体验。它还描述了每个optmization标志以及它如何影响调试。
2条答案
按热度按时间9udxz4iz1#
我认为很难说在调用gcc进行调试时不应该使用什么标志。gcc docs注意到libstdc++构建的默认调试标志是
-g
和-O2
,使用-g -O0 -fno-inline
将禁用任何优化和函数内联。在我看来,如果你真的想保证没有什么会扰乱你的调试过程,你只需要编译
-g -O0 -fno-inline
标志。wgeznvg72#
如GCC documentation中所述,您应该使用-Og:
-Og
优化调试体验。-Og支持不干扰调试的优化。它应该是标准编辑-编译-调试周期的优化级别选择,提供合理的优化级别,同时保持快速编译和良好的调试体验。
它还描述了每个optmization标志以及它如何影响调试。