2017-01-30 2 views
1

Ich debugge ein Problem, das ich in der Clam-Compiler auf GNU/Linux gefunden (berichtete here). Um das Problem zu finden, muss ich rückwärts von dem Punkt debuggen, an dem clang die Ausgabedatei schreibt.gdb catchpoint auf schreiben syscall funktioniert nicht

Ich versuchte, ein Catchpoint auf der Schreib syscall Einstellung:

(gdb) catch syscall write 
Catchpoint 2 (syscall 'write' [1]) 

Ich habe auch einen Haltepunkt:

(gdb) break write 
Breakpoint 3 at 0x7ffff6a7c700: write. (2 locations) 

Aber wenn ich ein Testprogramm zu kompilieren, wird kein Breakpoint ausgelöst: GDB nur Ausfahrten normalerweise. Ich habe bestätigt, dass es die Ausgabedatei schreibt, also muss write irgendwo aufgerufen werden. Weiß jemand, was ich hier falsch machen könnte? Vielen Dank!

Antwort

1

Es gibt eine "häufigste" Möglichkeit, Debugging clang statt clang -cc1. Der Treiber führt sich selbst neu aus, um Stack-Traces und andere Dinge einfacher zu machen, indem Fehler in erzeugten Programmen abgefangen werden. Wenn Sie das Debuggen ausführen, kann kein Breakpoint gesetzt werden, da er keinen Code aufgerufen hat Sie haben einen Haltepunkt in.

Sie können clang mit -v verwenden, um eine Befehlszeile -cc1 zu erhalten, und legen Sie dann gdb - args zu.

+0

Ah, danke! Ich wusste nicht über clang -cc1. Würde ich zum Debuggen von -cc1 einfach -cc1 zu meinen Befehlszeilenargumenten hinzufügen? –

+0

Ja. Ich habe meine Antwort aktualisiert, um sie ebenfalls zu reflektieren. – echristo

+0

Vielen Dank! Ich habe meinen ersten Befehl mit -v ausgeführt, dann habe ich meine gdb-Argumente darauf gesetzt, und der Breakpoint wurde ausgelöst! Sehr geschätzt! Ich habe dies als die Antwort markiert. –

Verwandte Themen