gpt4 book ai didi

gcc - 如何让 GNU AS 将每行调试信息或 GDB 发送到(AVR)程序集中的单步行?

转载 作者:行者123 更新时间:2023-12-03 10:24:00 25 4
gpt4 key购买 nike

我不知道如何让 GAS 在汇编中为 gdb 发出行号调试信息。请注意,我使用的是 avr-gcc 交叉编译器,但怀疑这是否相关。

我正在使用以下命令行选项进行组装:
avr-gcc -g -ggdb -Os -mmcu=atmega644 -ffunction-sections -fsigned-char -Winvalid-pch -Wall -Wno-long-long -x assembler-with-cpp -Wa,-ggdb -c -o z813 .o z813.s

当我使用一组几乎相同的参数来编译 C 代码时,我可以使用“objdump -l -d”查看行号和源文件扩充。

但是,程序集对象没有。 IE


000000d4 <run_timetable>:
d4: 0e 94 57 00 call 0xae ; 0xae <run_timetable_row>
d8: 0e 94 b4 00 call 0x168 ; 0x168 <delay>

vs

00000f9c :
main():
/home/braddock/work/tviki/tviki/scratch/z813-vid.c:68
f9c: 0e 94 ae 07 call 0xf5c ; 0xf5c <init>
/home/braddock/work/tviki/tviki/scratch/z813-vid.c:70
fa0: 0e 94 6a 00 call 0xd4 ; 0xd4 <run_timetable>

在 avr-gdb(通过 simulavr 远程 gdb 连接)中时,我无法让调试器单步执行我的汇编代码,尽管它确实识别符号名称和信息。我认为这是相关的。

我努力尝试在 info/man/google 中找到它并排列可能的标志。任何帮助表示赞赏!

最佳答案

当您“编译”汇编源代码时,调用 C 编译器有点过分。编译器将识别输入是 C 文件,并忽略您传递给它的影响 C 编译的任何选项,例如 -g 和 -Os。将“-v”传递给编译器行以查看实际传递给汇编器的选项。

当我与

avr-as --gstabs -mmcu=atmega644 a.s -o a.o

然后我在目标文件中得到漂亮的源代码行信息。我的 avr-as (2.18.0) 版本根本不支持 -ggdb 选项,它只有 -g、--gstab、--gstabs+、--gdwarf-2。使用 stabs,objdump 能够显示行。对于 dwarf-2,它不是 - 我不确定这是 objdump 中的错误还是 as 中的错误。

如果你绝对坚持以“gcc”的形式调用汇编器,你应该传递-Wa,--gstabs。

关于gcc - 如何让 GNU AS 将每行调试信息或 GDB 发送到(AVR)程序集中的单步行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1275944/

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