2010-11-24 21 views

Répondre

8

Il existe un moyen mais pas avant droite, l'astuce consiste à utiliser dup2 et dépend du fait que votre programme est lié à libc (que tous les c/C++ applications seraient, mais une application java ne serait pas par exemple)

  1. joindre à votre processus en utilisant gdb
  2. exécutez la commande suivante à l'invite de gdb pour rediriger stdout vers/tmp/titi

    $ imprimer dup2 (open ("/ tmp/titi", 0), 1)

  3. exécutez ce qui suit pour rediriger stderr vers/tmp/titi

    dup2 d'impression $ (open ("/ tmp/titi", 0), 2)

  4. Détacher gdb de votre processus et votre fait

Qu'est-ce que dup2 fait est

dupliquer un descripteur de fichier Cela signifie que les deux stdout/stderr (1 et 2) et le nouveau descripteur de fichier renvoyé à partir ouvert peut être utilisé interchangeable qui provoquera toute sortie vers stdout et stderr pour aller au fichier Vous avez ouvert.

+0

Génial! Je n'ai jamais pensé à ça. – msandiford

+0

pas de problèmes, j'ai appris sur stackoverflow il y a un moment :) – hhafez

+0

Je pense que cela fonctionnerait aussi bien avec java, si l'hébergement jvm est soit construit avec libc, soit avec un concept compatible de stdout. –