Pregunta

Estoy desarrollando una aplicación que se ejecuta en un SBC basado en Linux pequeña (~ 32 MB de RAM). Por desgracia, mi aplicación recientemente se convirtió en demasiado grande para ejecutarse en GDB más. ¿Alguien sabe de algún método de depuración buenos y ligeros que puedo usar en Linux embebido? Incluso la posibilidad de ver seguimiento de la pila de un subproceso sería de gran ayuda.

Debería mencionar que esta aplicación está escrito en C ++ y se ejecuta varios subprocesos, por lo gdbserver es un no-ir, ya que no funciona con aplicaciones multiproceso.

Gracias de antemano,

Maha

¿Fue útil?

Solución

gdbserver definitivamente trabaja con aplicaciones de subprocesos múltiples, estoy trabajando en un proyecto integrado en este momento con> 25 hilos y utilizar gdbserver todo el tiempo.

info threads 

enumera todos los hilos en el sistema

thread <thread number from info threads>  

cambia a ese hilo de ejecución.

thread apply XXX <command>  

ejecuta en el hilo designado por XXX, que también puede ser 'todos'. Así que si desea que el rastreo de origen de todos los subprocesos que se ejecutan hacer

thread apply all bt

Una vez que estás en el flujo de ejecución de un determinado hilos de todos los comandos típicos funcionan como lo harían en un único proceso de roscado.

Otros consejos

He oído hablar de la gente que hace los cortes como el funcionamiento de la aplicación en un emulador QEMU como GDB y luego ejecutar (o cosas como valgrind) sobre eso. Suena doloroso, pero si funciona ....

¿Le llegar a ninguna parte con libunwind (para obtener seguimientos de pila) y la tala de estilo printf?

impresión de puerto de serie es el peso más ligero que puedo pensar ~~~ Fácilmente se ve en un PC anfitrión, y el código de peso simple y ligero dentro de su aplicación ~~

Si usted no tiene un puerto serie, una vez que se utiliza un puerto GPIO y simulados de un puerto serie de usarlo. Funcionó perfectamente bien, pero era un poco lento :-( ~~~

¿Hay una razón por la que usted ha construido su propio depurador? Estoy desarrollando un sistema Linux usando un procesador ARM (AT91SAM926x) y estamos utilizando tanto compilador y depurador de CodeSourcery. No creo que se han dado a conocer una versión con el BGF 7 todavía, pero estoy depuración de aplicaciones multihilo en C ++ utilizando la herramienta gdbserver sin ningún problema.

gdbserver en realidad funciona con las aplicaciones multitarea. Sin embargo sí es necesario para compilar un depurador objetivo cruz por su anfitrión para conseguir que funcione con su GDB objetivo.

Vea este artículo para obtener una descripción detallada de cómo hacerlo:

depuración remoto cruzada objetivo con GDB y gdbserver

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top