linux - 缺少 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 调试它,但它总是说:

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

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

最佳答案

我没有发现您的 makefile 有任何问题。

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

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

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

使用命令运行它

gdb -x <script> calc

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

关于linux - 缺少 gdb 和 nasm 的调试信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10684468/

相关文章:

c - 将 void * 值设置为 intptr_t 变量是否需要显式转换?

c - 为什么 "a+++++b"不能在gcc中编译,而 "a+++b"、 "a+++++b"、 "a+++++b"可以?

algorithm - 汇编中 x86 上的带符号 64 位乘法和 128 位除法

c - 从 GCC 获取函数十六进制代码

c - srandom_r 处的段错误

linux - 使用一个 bash 脚本在 diff 目录中执行多个 bash 脚本

c++ - gcc 中变量模板的错误显式模板特化

汇编 - .data、.code 和寄存器...?

linux - 如何提取 filename.tar.gz 文件

c - 使用 gcc 理解共享库