2010-11-24 11 views

Respuesta

8

Hay una manera, pero no es sencillo, el truco es usar dup2 y depende del hecho de que su programa está enlazado con libc (que todos/C++ c aplicaciones serían, pero una aplicación java no sería por ejemplo)

  1. conecte al mismo proceso usando gDB
  2. ejecute lo siguiente en el símbolo del BGF para redirigir la salida estándar a/tmp/nuevofichero

    dup2 $ impresión (abierta ("/ tmp/nuevofichero", 0), 1)

  3. ejecute el siguiente para redirigir stderr/tmp/nuevofichero

    $ impresión dup2 (abierta ("/ tmp/nuevofichero", 0), 2)

  4. de separación gDB de su proceso y su hecho

Lo que hace es dup2

duplicar un descriptor de archivo Esto significa que tanto stdout/stderr (1 y 2) y el nuevo descriptor de fichero de regresar de abierto se puede utilizar intercambiables lo que hará que toda la producción va a stdout y stderr para ir al archivo tú abriste.

+0

Impresionante! Nunca pensé en eso. – msandiford

+0

sin problemas, lo aprendí en stackoverflow hace un tiempo :) – hhafez

+0

Creo que esto también funcionaría con Java, si el jvm de alojamiento está construido contra libc o tiene un concepto compatible de stdout. –

Cuestiones relacionadas