Al principio, puede ejecutar el programa y depurarlo pid. Esta solución, por supuesto, no cubre todos los casos.
Otro enfoque es utilizar las capacidades de Linux para la comunicación entre procesos. En resumen, redirige la salida de ret
a un archivo especial FIFO ("named pipe") y luego lee de esa FIFO a través de un depurador. Así es como se hace. De golpe, ejecute:
mkfifo foo
Esto crea un archivo especial en el directorio que servirá como un tubo llamado . Cuando escribe texto en este archivo (usando la misma sintaxis echo "Hello" >foo
), el programa de escritura se bloqueará hasta que alguien lea los datos del archivo (cat <foo
, por ejemplo). En nuestro caso, un proceso controlado por gdb leerá desde este archivo.
Después de crear un FIFO, van desde bash:
ret > foo & # ampersand because it may block as nobody is reading from foo
gdb blah
A continuación, en el símbolo del BGF, ejecute
run <foo
y obtener el efecto deseado. Tenga en cuenta que no puede leer los datos de fifo (ni tampoco de un conducto habitual) dos veces: cuando haya leído todos los datos, el proceso blah
fallece y debe repetir el comando escribiendo a foo (puede hacerlo) desde la otra ventana de shell).
Cuando haya terminado, elimine el fifo con rm foo
(o colóquelo en el directorio donde se eliminará automáticamente al reiniciar el sistema, como /tmp
).
¿Es esto diferente a: http://stackoverflow.com/questions/4521015/how-to-pass-arguments-and-redirect-stdin-from-a-file-to-program-run-in-gdb –