【问题标题】:Missing debugging information with gdb and nasmgdb 和 nasm 缺少调试信息
【发布时间】:2012-05-27 21:46:35
【问题描述】:
我有一个带有以下 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,但它们都不起作用。你能帮我解决这个问题吗?
【问题讨论】:
标签:
linux
gcc
assembly
gdb
nasm
【解决方案1】:
我没有发现你的 makefile 有任何问题。
快速谷歌搜索给出以下nasm。文档示例显示您需要反汇编才能查看代码,但这有点奇怪,因为已经调试了汇编代码,为什么调试器会要求进一步反汇编它。但是反汇编代码与汇编源文件是内联的。
形成你提到的似乎你可以调试的东西。如果您使用next 指令来逐步执行,请使用nexti。您可以通过disassemble 命令每次查看执行控制在哪里。或者,如果您希望它自动化,您可以将以下内容保存为脚本。 asm_next 成为您进入代码的新指令。
set language asm
set disassembly-flavor intel
define asm_next
nexti
disassemble
end
使用命令运行它
gdb -x <script> calc
附:对于较大的程序,您可能需要添加 -O0 标志以获取调试器反汇编代码与 .s 文件中的汇编代码之间的关联。