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

时间:2010-11-14 21:56:18

标签: debugging gcc gdb nasm kdbg

目前正在尝试使用KDbg / gdb调试来自http://www.kernelthread.com/projects/hanoi//html/asm.html(很棒的资源)的河内塔楼的源代码

由于我想回顾一下堆栈在这个问题中是如何使用的,我用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文件,但直到现在一直在运行)

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

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

与往常一样,提前感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

尝试使用-F dwarf代替-F stabs

答案 1 :(得分:0)

您可以使用as -o tmp.o something.s && ld -s -o something tmp.o && rm tmp.o进行汇总。 在gdb中只有display/8i *$eip(或 rip ,如果是64位),它将在每一步的指令指针后显示8条指令。所以你根本不需要调试信息; - )