2012-12-25 7 views
7

Sono in esecuzione su Ubuntu 12.10 a 64 bit.GDB lamenta Nessuna fonte disponibile

Sto cercando di eseguire il debug di un semplice programma di assemblaggio in GDB. Tuttavia, la modalità gui di GDB (-tui) sembra impossibile trovare il codice sorgente del mio file assembly. Ho ricostruito il progetto nella directory corrente e ho cercato inutilmente google, per favore aiutami qui.

miei comandi:

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

gcc -g hello.o -o hello 

gdb -tui hello 

informazioni di debug sembra essere caricato, è possibile impostare un punto di interruzione main(), ma la parte superiore dello schermo, dice ancora '[No fonte disponibile]'.

Ecco hello.asm se siete interessati:

; 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 
+0

Eliminato vedere la risposta sotto per la ragione. –

+1

Un programma prodotto da un assemblatore non ha informazioni di debug. Il compilatore (ad esempio 'gcc -g') sta producendo informazioni di debug come direttive o costrutti assembler. Quindi la tua domanda non ha senso. Tuttavia, 'gdb' è in grado di eseguire una volta alla volta, passo dopo passo, le istruzioni della macchina. –

+0

Avete qualche soluzione per questo? –

risposta

4

Il problema in questo caso è che l'assemblatore non produce informazioni line-number per il debugger. Quindi, anche se la fonte è lì (se fai "lista" in gdb, mostra un elenco del campo sorgente - almeno quando seguo i tuoi passi, lo fa), ma il debugger ha bisogno di informazioni sul numero di linea dal file per sapere quale linea corrisponde a quale indirizzo. Non può farlo con le informazioni fornite.

Per quanto posso trovare, non esiste un modo per ottenere che il NASM emetta la direttiva .loc utilizzata da as quando si utilizza gcc ad esempio. Ma as non è in grado di prendere il tuo file sorgente senza generare errori di gazillion [anche con -msyntax = intel -mmnemonic = intel - tu pensi che questo lavoro funzioni].

Quindi, a meno che qualche più intelligente non riesca a trovare un modo per generare le voci .loc che fornisce le informazioni sul numero di riga del debugger, non sono del tutto sicuro di come possiamo rispondere alla tua domanda in modo che tu possa essere felice con.

+1

Grazie. Sto registrando un bug report con NASM. –

+0

divertente. Ho avuto lo stesso problema dell'OP con un programma c e un testo gdb ui.Ho colpito la lista e tutto sembra funzionare quando ho appena premuto comando 'list'. – gideon

+0

@IrresponsibleNewb hai archiviato il bug report? Link? – BeeOnRope

4

Questa dichiarazione è falsa.

L'assemblatore fa produce informazioni sul numero di riga (notare i bit -g -F nani).

D'altra parte, assembla ciò che è ovviamente codice a 32 bit come 64 bit, che può funzionare o meno.

Ora se ci sono errori nell'output di debug della NASM, dobbiamo saperlo.

Un paio di esperimenti veloci dimostra che addr2line (ma non GDB!) fa decodifica NASM-generated informazioni sul numero di linea correttamente utilizzando colpi, ma non usando nano, quindi probabilmente c'è qualcosa di sbagliato nel modo in cui NASM genera NANO .. ma anche qualcosa di strano con gdb.

GNU addr2line versione 2.22.52.0.1-10.fc17 20120131, GNU gdb (GDB) Fedora (7.4.50.20120120-52.fc17)).

+0

Hmm. Che tipo di test dovrei eseguire per restringere il problema? –