Maison  >  Article  >  développement back-end  >  Comment déboguer des applications Python en cours d'exécution avec des traces de pile à la volée ?

Comment déboguer des applications Python en cours d'exécution avec des traces de pile à la volée ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-28 18:02:29391parcourir

How to Debug Running Python Applications with On-the-Fly Stack Traces?

Débogage d'applications Python en cours d'exécution avec trace de pile à la volée

Rencontrer des blocages occasionnels d'applications peut être frustrant lors du dépannage de la cause première. Python fournit un mécanisme pour générer une trace de pile en temps réel, vous permettant d'inspecter le code en cours d'exécution et d'identifier l'endroit problématique.

Solution utilisant la gestion du signal

Pour pour obtenir une trace de pile à la volée, pensez à utiliser le code suivant :

<code class="python">import code, traceback, signal

def debug(sig, frame):
    d={'_frame':frame}         # Allow access to frame object.
    d.update(frame.f_globals)  # Unless shadowed by global
    d.update(frame.f_locals)

    i = code.InteractiveConsole(d)
    message  = "Signal received : entering python shell.\nTraceback:\n"
    message += ''.join(traceback.format_stack(frame))
    i.interact(message)

def listen():
    signal.signal(signal.SIGUSR1, debug)  # Register handler

listen()</code>

Utilisation :

  1. Appelez Listen() pour activer la gestion du signal .
  2. Envoyez un signal SIGUSR1 au processus en cours d'exécution à l'aide d'un outil comme kill ou du code Python : os.kill(pid, signal.SIGUSR1).

Cela déclenchera un Python console avec la trace actuelle de la pile et vous permet d'explorer les variables. Appuyez sur Ctrl-D pour reprendre l'exécution.

Option supplémentaire

Pour déboguer les processus en arrière-plan, envisagez d'utiliser une solution basée sur des tuyaux fournie dans la recette du Python Cookbook.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn