c++ debugging shell gdb

Use GDB para depurar un programa C++ llamado desde un script de shell



debugging (5)

Tengo un script de shell extremadamente complicado, dentro del cual se llama un programa C ++ que quiero depurar a través de GDB. Es extremadamente difícil separar este programa c ++ del shell, ya que tiene muchas ramas y muchas configuraciones de variables ambientales.

¿Hay una manera de invocar GDB en este script de shell? Parece que gdb requiere que llame directamente a un programa de C ++.


¿Podrías agregar temporalmente gdb a tu script?


Además de las opciones mencionadas por @ diverscuba23, puede hacer lo siguiente:

gdb --args bash <script>

(Suponiendo que sea un script de bash. De lo contrario, adapte en consecuencia)


Hay dos opciones que puedes hacer:

  1. Invoque GDB directamente dentro del script de shell. Esto implicaría que no se ha redirigido la entrada estándar y la salida estándar.

  2. Ejecute el script de shell y luego adjunte el depurador al proceso de C ++ que se está ejecutando de la siguiente manera: gdb progname 1234 donde 1234 es el ID del proceso del proceso de C ++ en ejecución.

Si necesita hacer algo antes de que el programa comience a ejecutarse, entonces la opción 1 sería la mejor opción, de lo contrario, la opción 2 es la forma más limpia.


Modifique la aplicación c ++ para imprimir su pid y suspender 30 segundos (quizás en función de un entorno o un argumento). Adjuntar a la instancia en ejecución con gdb.


Probablemente modificaría el script para llamar siempre a gdb (y revertirlo más tarde) o agregar una opción para llamar a gdb. Esta será casi siempre la solución más fácil.

Lo más fácil sería mover temporalmente su ejecutable y reemplazarlo con un script de shell que ejecute gdb en el programa movido. Por ejemplo, en el directorio que contiene su programa:

$ mv program _program $ (echo "#!/bin/sh"; echo "exec gdb $PWD/_program") > program $ chmod +x program