Debugging 调试信息不包含在-g中

Debugging 调试信息不包含在-g中,debugging,gcc,gdb,nasm,kdbg,Debugging,Gcc,Gdb,Nasm,Kdbg,目前正在尝试使用KDbg/gdb调试河内塔楼的源代码(伟大资源) 因为我想回顾一下堆栈在这个问题中是如何使用的,所以我用NASM将其组装起来,并使用GCC将其链接起来。但是,我注意到,在KDbg中,当前执行点没有更新(即,我不知道我在文件中的位置)。由于KDbg依赖于gdb,因此我在gdb中运行了代码,以查看是否遇到类似问题 如果我在程序的第30行(即主函数中的一行)设置断点,我会得到以下结果: (gdb) break 30 Breakpoint 2 at 0x804840b: file han

目前正在尝试使用KDbg/gdb调试河内塔楼的源代码(伟大资源)

因为我想回顾一下堆栈在这个问题中是如何使用的,所以我用NASM将其组装起来,并使用GCC将其链接起来。但是,我注意到,在KDbg中,当前执行点没有更新(即,我不知道我在文件中的位置)。由于KDbg依赖于gdb,因此我在gdb中运行了代码,以查看是否遇到类似问题

如果我在程序的第30行(即主函数中的一行)设置断点,我会得到以下结果:

(gdb) break 30
Breakpoint 2 at 0x804840b: file hanoi.asm, line 30.
(gdb) next
Single stepping until exit from function main,
which has no line number information.
我目前正在使用我编写的以下小脚本编译程序集(我可能应该迁移到make文件,但这一直在工作到现在)

我刚从CentOS迁移到Ubuntu,所以我不确定这是我不熟悉的操作系统环境问题,还是其他问题


一如既往,提前感谢您的帮助。

尝试
-F dwarf
而不是
-F stab
您可以使用
作为-o tmp.o something.s和&ld-s-o something tmp.o和&rm tmp.o进行组装。

在gdb just
display/8i*$eip
(如果是64位,则为rip),它将在每一步的指令指针后显示8条指令。所以您根本不需要调试信息;-)

@paulr--不幸的是,我已经尝试过做那个改变(gcc-g$1.o-o$1)。没什么区别,是的,成功了。想解释一下为什么Ubuntu上的kdbg不再喜欢刺,而CentOS kdbg仍然喜欢刺吗?我不知道。我知道STABS是一种非常古老(而且非常可怕)的调试格式,如果可以的话,通常应该远离它。
bschlinker@net1develop02:~/.scripts$ cat asmgcc
# /usr/bin/sh

nasm -f elf -g -F stabs $1.asm -l $1.lst
gcc -g $1.o -o $1