Leichtes Debugging auf Embedded Linux
-
11-09-2019 - |
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
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: