目前正在尝试使用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,所以我不确定这是否是我不熟悉的操作系统环境问题,还是其他问题。
与往常一样,提前感谢任何帮助。
答案 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条指令。所以你根本不需要调试信息; - )