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.