使用gdb和nasm缺少调试信息

时间:2012-05-21 11:35:25

标签: linux gcc assembly gdb nasm

我有一个带有以下makefile的简单汇编程序:

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,但没有一个能够解决问题。你能帮我解决这个问题吗?

1 个答案:

答案 0 :(得分: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

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