Frage

Meine Frage bezieht sich, dass eine Anwendung auf einem eingebetteten ARM -Prozessor mit GDB/GDBServer debuggiert.

Ich kann die Anwendung selbst debuggen, aber die Anwendung verbindet dynamisch mit einer gemeinsamen Bibliothek, die ein In -House -Kommunikationsprotokoll implementiert. Ich möchte in der Lage sein, Breakpoints innerhalb der gemeinsam genutzten Bibliotheksfunktionen festzulegen. Versuchen Sie also, einige Probleme mit der Entdeckung von Geräten herauszufinden.

Ich habe dafür gesorgt, dass die Bibliothek mit Debug -Symbolen zusammengestellt und von GDB auf der Hostseite geladen wird. Ich kann Funktionen in der Bibliothek auflisten und sogar die Haltepunkte festlegen, aber sobald ich versuche, die Anwendung auszuführen der Effekt von:

Cannot insert breakpoint X.
Error accessing memory address : Input/output error.

wobei x die Haltepunktnummer in GDB ist und eine Adresse ist, die weit bis zu klein ist, um gültig zu sein.
Ich benutze die neue Bibliothek sowohl auf dem Ziel als auch auf dem Host -Computer, aber über via mount -o bind newlib oldlib auf dem Ziel von einem NFS -Reittier.
Hat jemand eine Vorstellung davon, was falsch sein könnte? Danke im Voraus.

War es hilfreich?

Lösung

WILTE GUT: Sie haben die gemeinsame Bibliothek in den Host geladen GDB bei falscher Adresse.

Verwenden Sie anstatt es explizit in GDB zu laden "set stop-on-solib-event on", Warten Sie, bis die Bibliothek geladen wird (info shared wird Ihnen die aktuelle Liste der geladenen Bibliotheken mitteilen) und dann Stellen Sie die Haltepunkte ein.

Andere Tipps

Ich sehe, dass diese Frage aus dem Jahr 2009 stammt, aber die aktuellen Antworten sind veraltet. Hier ist ein Update:

@Voller Russisch schlug vor, dass Sie verwenden müssen stop-on-solib-event. Dies ist nicht mehr wahr; NDK R8D unterstützt anhängige Haltepunkte in noch zu beloderten Solibs.

@Brent Piddy sagt das stop-on-solib-event Funktioniert nicht mit Gdbserver. Dies gilt auch nicht mehr, da mindestens R8C. Mein Unternehmen hat ein Produkt, das auf dieses NDK -Verhalten von GDB beruht. Ohne sie wären in großen Schwierigkeiten.

Verwenden Sie den folgenden Befehl, um anstehende Haltepunkte festzulegen, die nach dem Laden der gemeinsam genutzten Objektbibliothek behoben werden.

set breakpoint pending on

Leider können Sie "Set Stop-on-Solib-Event on" für GDBServer Remote-Debugging nicht verwenden, da GDBServer keine Solib-Ereignisse erkennt/sendet. Ich musste nur einen festgelegten Solib-Search-Path oder einen Sysroot-Befehl ausgeben, damit GDB alle gemeinsam genutzten Bibliotheksymbole lädt, nachdem er auf einen Haltepunkt auf Main gedrückt wurde.

Rennen zu main und dann set solib-search-path .

Andernfalls, gdbserver Stopps am dynamischen Lader, bevor die Bibliotheken geladen werden. Bei main, Sie sollten bereit für GDB sein.

Mehr Details: Debugging Shared Libraries mit GDBerver

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top