Linux 缺少gdb和nasm的调试信息

Linux 缺少gdb和nasm的调试信息,linux,gcc,assembly,gdb,nasm,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,但没有一种有效。您能帮我解决这个问题吗?我看不出您的makefile有任何问题 快速谷

我有一个带有以下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
,但没有一种有效。您能帮我解决这个问题吗?

我看不出您的makefile有任何问题

快速谷歌搜索提供以下信息。文档示例显示您需要反汇编来查看代码,但这有点奇怪,因为已经在调试汇编代码了,为什么调试器会要求进一步反汇编它。但是,反汇编代码与程序集源文件内联

从您提到的情况来看,您似乎能够进行调试。如果您正在使用
next
指令单步执行,请使用
nexti
。您可以
反汇编
命令,以便每次查看执行控件所在的位置。或者,如果您希望它自动化,您可以将以下内容另存为脚本<代码>asm_下一步将成为新的指令,供您逐步了解代码

set language asm
set disassembly-flavor intel
define asm_next
nexti
disassemble
end
使用命令运行它

gdb -x <script> calc
gdb-x计算
另外,对于较大的程序,您可能需要使用ad-O0标志来获取调试器反汇编代码和.S文件中的汇编代码之间的相关性