linux-使用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对其进行调试,但始终显示:

Single stepping until exit from function asc2int, which has no line number information.

我尝试了许多解决该问题的方法,包括-F矮人,但没有一个起作用.您能帮我解决这个问题吗?

解决方法:

我看不到您的makefile有任何问题.

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

形成您所提到的内容似乎可以调试.如果您要使用下一条指令逐步操作,请使用nexti.您可以在每次查看执行控件的位置时反汇编命令.或者,如果您希望它自动化,则可以将以下内容另存为脚本. asm_next成为您逐步进入代码的新指令.

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

使用命令运行

gdb -x <script> calc

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

上一篇:了解Linux中的堆栈


下一篇:如何使asm跳转到c中的变量地址?