GDB beschwert sich Keine Quelle Verfügbar
Ich auf Ubuntu 12.10 64bit.
Ich versuche zu Debuggen eine einfache Assembler-Programm in GDB. Jedoch GDB-gui-Modus (-tui) scheint nicht in der Lage den Quellcode zu finden, der meine assembly-Datei. Ich habe umgebaut, das Projekt in der derzeit directory und google gesucht ohne Erfolg, bitte helfen Sie mir hier draußen.
Meine Befehle:
nasm -f elf64 -g -F dwarf hello.asm
gcc -g hello.o -o hello
gdb -tui hello
Debug-Informationen scheint geladen zu werden, ich kann ein breakpoint auf main (), aber der oberen Hälfte der Bildschirm sagt immer noch '[ Keine Quelle Verfügbar ]'.
Hier ist Hallo.asm wenn du interessiert bist:
; 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
- Gelöscht, siehe Antwort unten zum Grund.
- Ein Programm erzeugt durch ein assembler, der keine debug-info. Der compiler (z.B.
gcc -g
) produziert debug-Informationen als assembler-Direktiven oder Konstrukte. Also deine Frage nicht wirklich Sinn. Allerdingsgdb
ist in der Lage zu laufen, sobald zu einem Zeitpunkt, Schritt für Schritt, Maschinen-Anweisungen. - Haben Sie irgendwelche Lösungen dafür?
- Für Googler: stackoverflow.com/questions/27747556/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem in diesem Fall ist, dass die assembler nicht produzieren line-number-Informationen für den debugger. So, obwohl die Quelle da ist (wenn Sie "Liste" in gdb, zeigt es eine Liste der Quellcode-Datei - zumindest dann, wenn ich Folge deine Schritte, die er macht), aber der debugger muss Zeilennummer-Informationen aus der Datei zu wissen, welche der Linie entspricht, welche Adresse. Es kann nicht, dass mit den gegebenen Informationen.
Soweit ich finden kann, gibt es nicht einen Weg, um NASM zu erteilen .loc-Richtlinie, die verwendet wird, durch
as
bei der Verwendunggcc
zum Beispiel. Aberas
ist nicht in der Lage, Ihre Quell-Datei, ohne dass eine Unmenge von Fehlern [auch mit -msyntax=intel -mmnemonic=intel -- Sie würden denken, dass sollte funktionieren].So, es sei denn, jemand klüger zu kommen mit einer Art und Weise zu generieren .loc-Einträge, die gibt der debugger-Zeilen-Nummer Informationen, ich bin mir nicht ganz sicher, wie können wir beantworten Ihre Frage in einer Weise, dass Sie froh sein mit.
list
Befehl.Diese Aussage ist falsch.
Den assembler hat produzieren line number information (Hinweis: die -g -F-Zwerg) bits.
Auf der anderen hand, die er versammelt, was offenbar der 32-bit-wie 64-bit, die möglicherweise oder möglicherweise nicht arbeiten.
Nun, wenn es Fehler in NASM die debug-Ausgabe müssen wir wissen, dass.
Ein paar schnelle Experimente zeigt, dass addr2line (aber nicht gdb!) hat decodieren NASM-erzeugt ZeilennummerInformationen richtig mit, fällt aber nicht mit Zwerg, so gibt es wahrscheinlich etwas falsch in der Art und Weise NASM erzeugt ZWERG... aber auch etwas seltsam mit gdb.
GNU-addr2line-version 2.22.52.0.1-10.fc17 20120131, GNU gdb (GDB) Fedora (7.4.50.20120120-52.fc17)).