Assembly 手动为gdb创建调试符号

Assembly 手动为gdb创建调试符号,assembly,compiler-construction,gdb,debug-symbols,Assembly,Compiler Construction,Gdb,Debug Symbols,简介。对于我的编译器课程,我必须把一些语言翻译成汇编语言。现在我的代码有一个segfault,我很难调试它。拥有监视变量的能力将大大简化过程,但最终的asm代码只有寄存器及其派生 问题。如何手动为gdb创建调试符号?我相信我能传播所有必要的信息。将创建单独的文件还是将其作为asm的一部分?在前一种情况下,如何让gdb知道该文件 有一些手册的链接就足够了。我搜索了一个,只找到了“gcc-g”和一些关于单独生成符号文件的问题。它通常是asm的一部分,带有特殊指令以发出一部分调试信息。查看.c文件上的

简介。对于我的编译器课程,我必须把一些语言翻译成汇编语言。现在我的代码有一个segfault,我很难调试它。拥有监视变量的能力将大大简化过程,但最终的asm代码只有寄存器及其派生

问题。如何手动为gdb创建调试符号?我相信我能传播所有必要的信息。将创建单独的文件还是将其作为asm的一部分?在前一种情况下,如何让gdb知道该文件


有一些手册的链接就足够了。我搜索了一个,只找到了“gcc-g”和一些关于单独生成符号文件的问题。

它通常是asm的一部分,带有特殊指令以发出一部分调试信息。查看
.c
文件上的
gcc-S
的输出,包括和不包括
-g
。e、 g.查看中的
.section.debug_info,“,@progbits
指令后面的内容。(针对Linux/ELF MIPS的gcc编译)。顺便说一句,你的目标是什么?存在不同的调试格式,目前在Linux/ELF目标上广泛使用的是DWARF。@PeterCordes,谢谢。我现在明白了,这是asm的一部分。我想我必须读一下。loc和其他东西:。我的gcc编译器是x86-64 gcc 7.3.Yup。或者让编译器在asm源代码行上发出注释,就像gcc的
-fverbose asm
那样(尝试在上面的Godbolt链接上添加注释),并使用汇编程序将其汇编,该汇编程序生成asm源代码级调试的调试信息。(如
as-g
)。因此,您可以通过某种方式单步执行asm,并看到编译器中的一些字符串附加到每条指令,命名操作数。对于设置观察点没有多大帮助,但可以帮助您了解编译器是如何实现源代码逻辑的。@PeterCordes,您能再澄清一点吗?我可以看到这样的行:
mov-rdx,QWORD-PTR[rbp-8]#tmp89,a
。我是否正确地理解了编译器现在知道
rdx
就是
tmp89
QWORD-PTR[rbp-8]
就是从这一点上知道的
a
?gcc-g编译能做到吗?如果是,这可能正是我需要的。是的,注释只是使用C变量名重复操作数列表,或者对内部临时变量重复
tmpXX
。是的,我认为,
gcc-gfoo.s
将为您提供调试信息,帮助GDB显示正确的asm源代码行。