Frage

Ich entwickle eine Anwendung, die auf einem kleinen Linux-basierten SBC läuft (~ 32 MB RAM). Leider wurde mein app vor kurzem zu groß mehr unter GDB zu laufen. Kennt jemand eine gute, leichte Debug-Methoden, die ich in Embedded Linux verwenden kann? in der Lage, sogar ein Thread-Stack-Trace zu sehen wäre sehr hilfreich.

Ich sollte erwähnen, dass diese Anwendung in C ++ geschrieben ist und mehrere Threads ausgeführt wird, so gdbserver ist ein No-Go, da es nicht mit Multi-Thread-Anwendungen funktioniert.

Vielen Dank im Voraus,

Maha

War es hilfreich?

Lösung

gdbserver funktioniert auf jeden Fall mit Anwendungen mit mehreren Threads, ich bin auf einem Embedded-Projekt arbeiten jetzt mit> 25 Fäden und wir verwenden gdbserver die ganze Zeit.

info threads 

listet alle Threads im System

thread <thread number from info threads>  

schaltet auf diesen Ausführungsthread.

thread apply XXX <command>  

Läuft auf dem Faden durch XXX bezeichnet, die auch ‚alle‘ sein kann. Also, wenn Sie die Rückverfolgung von allen ausgeführten Threads wollen tun

thread apply all bt

Wenn Sie sind in der Ausführungsablauf eines gegebenen Threads alle Ihre typischen Befehle funktionieren, wie sie es in einem Single-Threaded-Prozess.

Andere Tipps

Ich habe von Leuten gehört Hacks wie die Ausführung der Anwendung in einem Emulator wie QEMU und dann GDB läuft (oder Dinge wie valgrind) auf, das zu tun. Es klingt schmerzhaft, aber wenn es funktioniert ....

Möchten Sie bekommen überall mit libunwind und printf-Stil Protokollierung (Stack-Traces zu bekommen)?

Serielle Schnittstelle Druck ist das geringe Gewicht ich mir vorstellen kann ~~~ Leicht in einem Host-PC zu sehen ist, und einfach und leicht Code in Ihrer Anwendung ~~

Wenn Sie nicht über eine serielle Schnittstelle, einmal haben wir einen GPIO-Port und simuliert eine serielle Schnittstelle Sie es. Es funktionierte sehr gut, aber es war ein bisschen langsam :-( ~~~

Gibt es einen Grund, warum Sie Ihren eigenen Debugger gebaut haben? Ich entwickle ein Linux-System einen ARM-Prozessor (AT91SAM926x) und wir beide Compiler und Debugger von CodeSourcery verwenden. Ich glaube nicht, dass sie eine Version mit GDB 7 noch nicht freigegeben haben, aber ich bin Debuggen Multithreaded C ++ Anwendungen, die das gdbserver Tool ohne Probleme verwenden.

gdbserver ist in der Tat mit Multithreading-Anwendungen arbeiten. Allerdings brauchen Sie ein Quer Ziel Debugger kompilieren für Ihren Host, um es mit Ihrem Ziel gdb zu arbeiten.

Sehen Sie diesen Artikel für eine detaillierte Beschreibung, wie es zu tun:

Remote-Cross-Ziel-Debugging mit GDB und gdbserver

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