Débogage de l'enfant après la fourche (suivez-fourche-mode enfant configuré)
Je suis du développement d'une application dont le parent fourches d'un enfant à traiter certaines tâches. Je rencontre un problème lorsque j'ai configuré gdb à suivre-fourche-mode enfant, mais après la fourche, après avoir atteint un point d'arrêt, il envoie un SIGTRAP, mais l'enfant d'une certaine manière se termine et envoyer SIGCHLD à la société mère.
J'ai configuré signal(SIGTRAP, SIG_IGN)
avant fourche, donc ma compréhension est que l'enfant doit hériter et d'ignorer SIGTRAP lorsque le point d'arrêt est atteint, mais il ne se passe rien.
Merci de m'aider à comprendre cela si je suis incorrect.
Comment j'ai réussi à déboguer le processus de l'enfant?
- "... après avoir atteint un point d'arrêt, il envoie un SIGTRAP ..." c'est ainsi que le débogueur est notifié sur le point d'arrêt. "... l'enfant en quelque sorte se termine ..." termine normalement ou anormalement? Vous pouvez utiliser
WIFEXITED(status)
sur la valeur retournée parwait[...]([...,]&status[, ...])
dans le parent de vérifier cela. Voirman 3 wait
pour plus de détails.
Vous devez vous connecter pour publier un commentaire.
Le processus fils hérite les gestionnaires de signaux de la part du parent, mais pas dans l'attente de signal.
Après la bifurcation essayez d'installer le gestionnaire de signal pour
SIGTRAP
à un endroit dans le code où le processus de l'enfant s'exécute après la bifurcation. Si vous ne le manipulez pasSIGTRAP
, l'action par défaut est que l'enfant est résilié.Si vous souhaitez déboguer le processus de l'enfant, vous devez utiliser
follow-fork-mode
.Vous devez définir le mode à l'aide de
Cependant, maintenant que l'enfant peut être débogué, et le parent s'exécute pas cochée.
Il est une autre façon de débogage du processus enfant.
Après
fork()
est exécutée, mettre unsleep()
appel dans le code où l'enfant s'exécute, obtenir le PID de l'enfant à l'aide de laps
utilitaire, puis fixez le PID.Maintenant, vous pouvez déboguer le processus de l'enfant, comme tout autre processus.
Après le débogage, vous pouvez détacher le PID à l'aide de