2009-09-05 12 views

Répondre

6

Utilisez gdb --wait. Par exemple, essayez

gdb --wait TextEdit 

à partir de la ligne de commande, puis lancez TextEdit.

+0

C'est une bonne idée aussi. –

+0

Cela fonctionne mieux. –

2

Je ne pense pas que vous puissiez lancer gdb de la même manière. Au lieu de cela, exécutez votre processus parent à partir de gdb ou attachez-le au processus en cours avant de le désactiver. Il existe un paramètre appelé follow-fork-mode qui contrôle le processus suivi par le débogueur. Jetez un oeil à the GDB Manual pour une description agréable.

+0

Ah, cela semble effectivement être quelque chose dont j'aurais besoin. Cela semble impliquer que le processus parent n'est plus débogué après le vfork(), mais je vais l'essayer. Ce serait triste, cependant, si c'est le cas. –

+0

Eh bien, c'était une acceptation rapide. :-) Voir ma réponse. gdb --wait fait ce que vous voulez. – Ken

+0

@jeff: vous pouvez toujours attacher au parent avec une instance différente de gdb. Je ne suis pas sûr que ça se détache du parent ou non. Cela fait un moment que j'ai débogué un module Apache en utilisant ceci. –

2

Si vous utilisez des processus launchd to spawn, une clé booléenne WaitForDebugger est insérée dans le fichier plist du travail. Si c'est oui, alors launchd attend (de manière surprenante!) Que le débogueur commence avant le exec().

+0

Aussi intéressant. Comment utilise-t-on launchd pour générer un processus? J'ai utilisé fork() et exec(). –

+0

Je vais laisser Quinn répondre pour moi: http://developer.apple.com/mac/library/technotes/tn2005/tn2083.html Consultez également la page de manuel pour launchd.plist (5) –

Questions connexes