gpt4 book ai didi

debugging - gcc LTO 似乎剥离调试符号

转载 作者:行者123 更新时间:2023-12-03 15:30:47 25 4
gpt4 key购买 nike

我有一个项目,在 ARM Cortex-M4 处理器上运行,我试图在其中包含 gcc 链接时优化 (LTO) 功能。

目前我的编译和链接标志是:

CFLAGS = -ggdb -ffunction-sections -Og
LDFLAGS = -Wl,-gc-sections

使用这些标志一切正常,我能够正确调试项目。

然后我尝试添加 -flto到 CFLAGS。尽管程序运行良好,但我无法再调试该项目,gdb 提示缺少调试符号。运行 objdump -g在 ELF 文件(启用 LTO)上提供以下输出:
xxx.elf:     file format elf32-littlearm

Contents of the .debug_frame section:

00000000 0000000c ffffffff CIE
Version: 1
Augmentation: ""
Code alignment factor: 2
Data alignment factor: -4
Return address column: 14

DW_CFA_def_cfa: r13 ofs 0

00000010 00000018 00000000 FDE cie=00000000 pc=08002a3c..08002a88
DW_CFA_advance_loc: 2 to 08002a3e
DW_CFA_def_cfa_offset: 16
DW_CFA_offset: r4 at cfa-16
DW_CFA_offset: r5 at cfa-12
DW_CFA_offset: r6 at cfa-8
DW_CFA_offset: r14 at cfa-4
DW_CFA_nop

0000002c 0000000c ffffffff CIE
Version: 1
Augmentation: ""
Code alignment factor: 2
Data alignment factor: -4
Return address column: 14

DW_CFA_def_cfa: r13 ofs 0

0000003c 0000000c 0000002c FDE cie=0000002c pc=08002a88..08002a98

注意缺少的 .debug_info部分。回到项目设置,只删除 -flto来自 CFLAGS 解决了这个问题。 objdump -g在没有 LTO 的 ELF 文件上现在显示 .debug_info部分,填充了对我项目中函数的正确引用,并且调试再次正常工作。

如何让 LTO 和调试符号一起玩得很好?

编辑 : 忘了包括我的 gcc 信息。我正在使用 GNU ARM Embedded Toolchain ,并在 5.4-2016q2 和 5.4-2016q3 版本上进行了测试。

最佳答案

这是因为 gcc 不支持组合 -flto-g .

您可以找到详细信息 GCC Online Docs - Optimize Options

"Combining -flto with -g is currently experimental and expected to produce unexpected results."



当您使用 -flto , -g将被忽略。

关于debugging - gcc LTO 似乎剥离调试符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40743372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com