Comment puis-je vider un processus Python entier pour une inspection de débogage ultérieure?

StackOverflow https://stackoverflow.com/questions/141802

  •  02-07-2019
  •  | 
  •  

Question

J'ai une application Python dans un état étrange. Je ne veux pas faire de débogage en direct du processus. Puis-je le transférer dans un fichier et examiner son état ultérieurement? Je sais que j'ai restauré des corefiles de programmes C dans gdb plus tard, mais je ne sais pas comment examiner une application Python de manière utile à partir de gdb.

(Ceci est une variante de ma question sur débogage de mèmes dans un système de production .)

Était-ce utile?

La solution

Il n'y a pas d'autre moyen intrinsèque que d'abandonner (avec os.abort (), provoquant le vidage de mémoire si les ressources le permettent) - bien que vous puissiez certainement créer votre propre fonction de "vidage" qui draine les informations pertinentes sur les données dont vous vous occupez sur. Il n’existe aucun outil prêt à l’emploi.

En ce qui concerne le fichier core d’un processus Python, la la source Python a une fichier gdbinit contenant des macros utiles. C’est toujours beaucoup plus pénible que de pénétrer d’une manière ou d’une autre dans le processus lui-même (avec pdb ou l’interprète interactif), mais cela simplifie un peu la vie.

Autres conseils

Un membre de la hiérarchie supérieure a déclaré qu’il n’existait pas de méthode intégrée, mais ce n’était pas tout à fait vrai. Pour un exemple, vous pouvez regarder les outils de débogage de pylônes. Lorsqu'il y a une exception, le gestionnaire d'exceptions enregistre la trace de la pile et imprime une URL sur la console qui peut être utilisée pour récupérer la session de débogage via HTTP.

Même s'ils gardent probablement ces sessions en mémoire, ce ne sont que des objets en python. Par conséquent, rien ne vous empêche de choisir un vidage de pile et de le restaurer ultérieurement pour inspection. Cela signifierait quelques changements dans l'application, mais cela devrait être possible ...

Après quelques recherches, il s’avère que le code approprié provient réellement de Module EvalException . Vous devriez pouvoir y chercher ce dont vous avez besoin.

Cette réponse suggère de créer le dump principal de votre programme, puis de poursuivre l'exécution sur une autre boîte suffisamment similaire.

scroll top