test sirve sentencias script que para ejemplos depurador control comandos comando gdb command-line-arguments

gdb - sirve - script linux ejemplos



¿Cómo ejecuto un programa con argumentos de línea de comando usando gdb dentro de un script bash? (6)

Cuando se ejecuta un programa en gdb, generalmente, los argumentos para el programa se dan en el comando de run . ¿Hay alguna manera de ejecutar el programa usando gdb y también de dar argumentos dentro de un script de shell?

Vi una respuesta en una pregunta relacionada, mencionando que podemos adjuntar el gdb al programa después de que el script comience a ejecutarse. Pero entonces tendré que "esperar" el programa.

Tengo curiosidad por saber si hay alguna otra manera de hacer esto.


Otra forma de hacer esto, que personalmente me parece más conveniente e intuitiva (sin tener que recordar el parámetro --args ), es compilar normalmente, y usar r arg1 arg2 arg3 directamente desde dentro de gdb , así:

$ gcc -g *.c *.h $ gdb ./a.out (gdb) r arg1 arg2 arg3


Podrías crear un archivo con contexto:

run arg1 arg2 arg3 etc program input

Y llamar a gdb como

gdb prog < file


Puedes ejecutar gdb con el parámetro --args,

gdb --args executablename arg1 arg2 arg3

Si desea que se ejecute automáticamente, coloque algunos comandos en un archivo (por ejemplo, ''ejecutar'') y proporcione como argumento: -x / tmp / cmds. Opcionalmente puedes ejecutar con el modo -batch.

gdb -batch -x /tmp/cmds --args executablename arg1 arg2 arg3


Una adición a la respuesta de Hugo Ideler. Al usar argumentos con el prefijo propio como -- o - , no estaba seguro de entrar en conflicto con gdb one.

Parece que gdb toma todas las opciones después de args como argumentos para el programa.

Al principio quería estar seguro, corrí gdb con comillas alrededor de tus argumentos, se eliminó en el lanzamiento.

Esto funciona también, pero opcional:

gdb --args executablename "--arg1" "--arg2" "--arg3"

Esto no funciona:

gdb --args executablename "--arg1" "--arg2" "--arg3" -tui

En ese caso, -tui se usa como parámetro de mi programa y no como gdb one.


gdb tiene --init-command <somefile> donde algún archivo tiene una lista de comandos gdb para ejecutar, uso esto para tener //GDB comentarios de //GDB en mi código, luego `

echo "file ./a.out" > run grep -nrIH "//GDB"| sed "s//(^[^:]/+:[^:]/+/):.*$//1/g" | awk ''{print "b" " " $1}''| grep -v $(echo $0|sed "s/.*////g") >> run gdb --init-command ./run -ex=r

como una secuencia de comandos, que coloca el comando para cargar los símbolos de depuración y luego genera una lista de comandos de interrupción para poner un punto de interrupción para cada //GDB comentario de //GDB , y comienza a ejecutarse


gdb -ex=r --args myprogram arg1 arg2

-ex=r es la abreviatura de -ex=run y le dice a gdb que ejecute su programa inmediatamente, en lugar de esperar a que escriba "run" en el indicador. Luego, --args dice que todo lo que sigue son el comando y los argumentos, tal como los escribiría normalmente en la línea de comandos.