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:
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.
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
donde1234
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