我有一个带有一个.c C源代码和一个.S汇编源代码的项目。编译和链接后,有没有办法使用Kdbg调试.S代码?我从.c文件调用一个.S函数,但在Kdbg中没有加载代码。
答案 0 :(得分:3)
在源代码中添加.file指令,如:.file“sourceasm.s”。然后Kdbg将按预期使用它。
答案 1 :(得分:2)
我刚试过kdbg
(the KDE front-end for gdb,而不是几乎同名的Linux kernel debugger kgdb
。
它似乎没有像常规gdb layout asm
那样的正确反汇编模式。您可以将“内存”窗口设置为反汇编,将地址设置为$pc
(并且在单步执行时更新),但这会占用内存窗口,并且对于设置断点或向后滚动指令不是很灵活在当前的RIP / EIP之前。
即使您正在调试asm源,您有时也希望让调试器显示真正的反汇编,而不是asm源。例如,在使用宏的代码中,或使用NASM %rep
重复块。
AFAICT,kdbg
对于asm调试来说不是一个很好的选择。带有layout asm
/ layout reg
的文本模式GDB可以;请参阅x86标记wiki的底部以获取提示。我也试过https://github.com/cs01/gdbgui。它有一个反汇编模式,但它不是很好。
正如@ivan所说,如果你为它添加足够的元数据来知道对象来自哪个源文件,kgdb将允许你对asm源文件进行源代码级调试。
gcc -g foo.S
nasm -felf64 -g -Fdwarf
进行汇总以包含DWARF调试信息。 (NASM默认为STABS调试信息,也可以。)yasm -felf64 -gdwarf2
汇总。有关从asm源构建静态/动态二进制文件的更多信息,请参阅Assembling 32-bit binaries on a 64-bit system (GNU toolchain)。