Cuando se ejecuta un programa en GDB, generalmente, los argumentos para el programa se dan en el runcomando. ¿Hay alguna manera de ejecutar el programa usando GDB y también dar argumentos dentro de un script de shell?
Vi una respuesta en una pregunta relacionada, mencionando que podemos adjuntar GDB al programa después de que el script comience a ejecutarse. Pero luego tendré que 'esperar' el programa.
Hay otra manera de hacer esto?

Respuestas:
Puede ejecutar gdb con el parámetro --args,
Si desea que se ejecute automáticamente, coloque algunos comandos en un archivo (por ejemplo, 'ejecutar') y dele como argumento: -x / tmp / cmds. Opcionalmente, puede ejecutar con el modo -batch.
fuente
man gdbno contiene--args, por eso no lo encontré.gdb --helphace.info gdbpróxima vez :-).info. Si Google o Stack Overflow deja de funcionar XDindex-search). Pruebe:,info gdbluego 'i', luego '--args'. Te llevará directamente a eso.-ex=res la abreviatura de-ex=runy le dice a gdb que ejecute su programa de inmediato, en lugar de esperar a que escriba "ejecutar" en el indicador. Luego--argsdice que todo lo que sigue es el comando y los argumentos, tal como los escribiría normalmente en la línea de comandos.fuente
-exe=rmuy útil!Otra forma de hacer esto, que personalmente considero un poco más conveniente e intuitiva (sin tener que recordar el
--argsparámetro), es compilar normalmente y usarr arg1 arg2 arg3directamente desde adentrogdb, así:fuente
Puede crear un archivo con contexto:
Y llama a gdb como
fuente
gdb tiene
--init-command <somefile>donde somefile tiene una lista de comandos gdb para ejecutar, lo uso para tener//GDBcomentarios en mi código, luego `como un script, 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
//GDBcomentario, y comienza a ejecutarfuente
Si el
--argsparámetro no funciona en su máquina (es decir, en Solaris 8), puede iniciar gdb comoY puede combinar esto con ingresar un archivo a stdin y "ejecutarse inmediatamente":
fuente
Además de la respuesta de Hugo Ideler. Cuando utilicé argumentos con el mismo prefijo como
--o-, no estaba seguro de entrar en conflicto con gdb one.Parece que gdb toma todas las
argsopciones como argumentos para el programa.Al principio quería estar seguro, ejecuté gdb con comillas alrededor de sus argumentos, se elimina en el lanzamiento.
Esto también funciona, pero opcional:
Esto no funciona
En ese caso,
-tuise usa como parámetro de mi programa, no como gdb one.fuente
Demasiado tarde, pero aquí hay un método que funciona durante la
gdbsesión.entonces
Esto devolverá muchas coincidencias, la útil es
set args.entonces
Esto ejecutará el programa, pasando a main (argc, argv) los argumentos y el recuento de argumentos.
fuente