如何在 nasm 中包含调试信息?

How can I include debug information with nasm?

我有这个源代码:

;  hello.asm  a first program for nasm for Linux, Intel, gcc
;
; assemble: nasm -f elf -l hello.lst  hello.asm
; link:     gcc -o hello  hello.o
; run:          hello 
; output is:    Hello World 

    SECTION .data       ; data section
msg:    db "Hello World",10 ; the string to print, 10=cr
len:    equ $-msg       ; "$" means "here"
                ; len is a value, not an address

    SECTION .text       ; code section
        global main     ; make label available to linker 
main:               ; standard  gcc  entry point

    mov edx,len     ; arg3, length of string to print
    mov ecx,msg     ; arg2, pointer to string
    mov ebx,1       ; arg1, where to write, screen
    mov eax,4       ; write command to int 80 hex
    int 0x80        ; interrupt 80 hex, call kernel

    mov ebx,0       ; exit code, 0=normal
    mov eax,1       ; exit command to kernel
    int 0x80        ; interrupt 80 hex, call kernel

此代码取自here

出于学习目的,我在 VirtualBox 上运行 ubuntu 12.04 32 位

我遵循的步骤是:

现在,当我只运行 hello 时,它会正常运行,但 gdb 无法显示任何源代码。为什么?当我在 gdb 中尝试 run 时,我会看到 Hello World 文本很好,但它不显示源代码。

stabs 格式似乎不适用于 GDB,请尝试使用 DWARF (http://en.wikipedia.org/wiki/DWARF)

编译

nasm -f elf -g -F dwarf hello.asm

然后在 gdb 中输入

start

然后

si

您将看到带有评论等的资源。正如 Koray Tugay 所说,gdb 中很可能存在错误。