1

目前正在尝试使用 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,所以我不确定这是我不熟悉的操作系统环境问题,还是其他问题。

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

4

2 回答 2

2

尝试-F dwarf代替-F stabs.

于 2010-11-15T00:43:32.237 回答
0

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

于 2010-11-15T01:07:52.733 回答