3

我有一个带有以下生成文件的简单汇编程序:

all : calc

calc : calc.o
    gcc -m32 -g -o calc calc.o

calc.o : calc.s
    nasm -f elf -g -F stabs calc.s

我尝试使用它来调试它,gdb但它总是说:

单步执行直到退出函数 asc2int,它没有行号信息。

我尝试了许多解决该问题的方法,包括-F dwarf但没有一个有效。你能帮我解决这个问题吗?

4

1 回答 1

4

我没有看到你的makefile有任何问题。

快速谷歌搜索给出以下nasm。文档示例显示您需要反汇编才能查看代码,但这有点奇怪,因为已经调试了汇编代码,为什么调试器会要求进一步反汇编它。然而,反汇编代码与汇编源文件是内联的。

形成您提到的内容,您似乎可以调试。nexti如果您正在使用指令next进行单步执行,请使用它。您可以disassemble命令每次查看执行控制所在的位置。或者,如果您希望它自动化,您可以将以下内容保存为脚本。asm_next成为您进入代码的新指令。

set language asm
set disassembly-flavor intel
define asm_next
nexti
disassemble
end

使用命令运行它

gdb -x <script> calc

PS 对于较大的程序,您可能需要添加 -O0 标志以获取调试器反汇编代码与 .s 文件中的汇编代码之间的关联。

于 2012-05-21T14:55:03.047 回答