Question

Je développe une application qui fonctionne sur un petit SBC Linux (~ 32MB RAM). Malheureusement, mon application est récemment devenu trop grand pour fonctionner sous GDB plus. Est-ce que quelqu'un sait de toute bonne, les méthodes de débogage léger que je peux utiliser dans Linux embarqué? Même pouvoir voir la trace de la pile d'un thread serait extrêmement utile.

Je dois mentionner que cette application est écrit en C ++ et exécute plusieurs threads, donc gdbserver est un non-droit, car il ne fonctionne pas avec les applications multithread.

Merci à l'avance,

Maha

Était-ce utile?

La solution

gdbserver fonctionne certainement avec des applications multi-thread, je travaille sur un projet intégré en ce moment avec> 25 fils de discussion et nous utilisons gdbserver tout le temps.

info threads 

répertorie tous les fils dans le système

thread <thread number from info threads>  

commutateurs à ce fil d'exécution.

thread apply XXX <command>  

Runs sur le fil désigné par XXX, qui peut aussi être « tout ». Donc, si vous voulez que le retraçage de toutes les discussions en cours d'exécution faire

thread apply all bt

Une fois que vous êtes dans le flux d'exécution d'un fils donné toutes vos commandes typiques fonctionnent comme ils le feraient dans un seul processus fileté.

Autres conseils

Je l'ai entendu parler de gens qui font des hacks comme exécutant l'application dans un émulateur comme QEMU puis en cours d'exécution GDB (ou des choses comme valgrind) à ce sujet. Il semble douloureux, mais si ça marche ....

Est-ce que vous mènera nulle part avec libunwind (pour obtenir des traces de pile) et l'exploitation forestière printf?

l'impression du port série est le poids le plus léger, je peux penser à ~~~ Facilement vu dans un PC hôte, et le code de poids simple et la lumière dans votre application ~~

Si vous ne disposez pas d'un port série, une fois que nous avons utilisé un port de GPIO et simulé un port série utilisant. Il a parfaitement fonctionné, mais était un peu lent :-( ~~~

Y at-il une raison pour laquelle vous avez construit votre propre débogueur? Je développe un système Linux en utilisant un processeur ARM (AT91SAM926x) et nous utilisons à la fois compilateur et un débogueur de CodeSourcery. Je ne pense pas qu'ils ont sorti une version avec GDB 7 encore, mais je suis le débogage des applications C ++ multithread utilisant l'outil gdbserver sans aucun problème.

gdbserver ne fonctionne en effet avec des applications multithread. Cependant, vous avez besoin de compiler un débogueur cible croix pour votre hôte pour obtenir de travailler avec votre gdb cible.

Voir cet article pour une description détaillée de la façon de le faire:

distance débogage contre-cible avec GDB et gdbserver

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top