2016-04-19 12 views
0

Ich denke, der Titel sagt alles !! :)Umschalten zwischen Remote-KGDB und lokalen DDB innerhalb einer Debugging-Sitzung

Ich würde gerne wissen, ob es tatsächlich eine Möglichkeit gibt, zwischen gdb und ddb beim Debuggen eines Remote-Kernel zu wechseln.

Ich bin schon bei der Eingabeaufforderung gdb (oder besser kgdb). Von hier aus wechsle ich zu lokalen ddb auf der debugged machine ??

Meine Kernel-Konfigurationsdatei enthält bereits options BREAK_TO_DEBUGGER und ich haben beide GDB und DDB aka konfiguriert: options GDB options DDB

Gemäß der developer's handbook: „Jedes Mal, wenn Sie gdb eingeben, wird der Modus zwischen entfernten GDB und lokalen DDB umgeschaltet werden Um eine nächste Falle sofort zu erzwingen, geben Sie einfach s ein (Schritt). Ihre Host-GDB erhält nun die Kontrolle über den Zielkernel: "

Also habe ich versucht, 'gdb' an der gdb-Eingabeaufforderung zu tippen (witzig : D) und wie erwartet war es ein unerkanntes Kommando. Offensichtlich sollte dieser Befehl an der ddb-Eingabeaufforderung eingegeben werden. Aber meine Frage ist, wie kann ich ddb von einer laufenden Maschine absetzen, deren serielle Ports (wenn auch virtuelle) remote an die KGDB eines anderen Rechners angeschlossen sind? Wenn Remote-GDB zuhört und ich eine Panik mit sysctl debug.kdb.enter=1 erzwinge, fällt es in Remote-KGDB. Wenn es jedoch NICHT zuhört, friert das System einfach ein.

Was ich möchte, ist ddb auf dem lokalen Rechner eingeben. Führen Sie ein Debugging mit diesem aus; Drop zu Remote KGDB für Dinge, die am besten mit KGDB getan werden, dann wechseln Sie zurück zu lokalen DDB, wenn ich fertig bin.

Gibt es eine Möglichkeit, das zu tun? Wenn ja, bitte lassen Sie es mich wissen

Antwort

0

KDB enthält DDB & KDB Backends, aber es gibt eine Menge von Bedingungen, wenn sie verfügbar sind. Um zu überprüfen, ob das Backend verfügbar ist, überprüfen Sie sysctl debug.kdb.available und debug.kdb.current (sys/kern/subr_kdb.c). Wenn beide Backends verfügbar sind, sollte debug.kdb.available "ddb gdb" enthalten.

Die Möglichkeit, zwischen Backends (gdb/ddb) umzuschalten, besteht darin, ddb zuerst einzugeben, dann gdb aufzurufen und das Debugging durchzuführen. Dann beenden Sie gdb und kehren Sie zu ddb zurück (tatsächlich wird eine neue Trap passieren, scheint Strg + C ist erforderlich). Dies bedeutet, dass debug.kdb.current vor der Panik auf "ddb" gesetzt werden sollte.

Ich hoffe, es wird helfen.

+0

'sysctl debug.kdb.available' gibt's ddb gdb' ' sysctl debug.kdb.current' gibt's gdb' ich an der ddb Prompt versucht ctrl-c haben (wenn gdb aktiv war) zu gibt die Kontrolle zurück an GDB, aber ohne Erfolg. Wenn ich mit 'debug.kdb.current' herumspiele, kann ich mein Ziel erreichen? – HighOnMeat

+0

Nicht sicher. es sollte 1 Back-End in der Zeit geben. Übergang von DDB zu GDB ist "gdb" Befehl, Übergang zurück ist, um gdb zu beenden. –

+0

Ich habe das aktuelle Backend mit 'sysctl debug.kdb.current = ddb' in ddb geändert. Dann löste ich eine Panik aus und ich war an der ddb-Eingabeaufforderung. Die Eingabe von 'gdb' verbindet den Rechner mit dem gdb-Backend auf dem Client-Rechner. Aber das Beenden von gdb bringt mich zurück zum Shell-Prompt auf dem Debugger und NICHT zu ddb. So sollte es sein? – HighOnMeat