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

Mary-Kate Olsen
Libérer: 2024-10-28 18:02:29
original
390 Les gens l'ont consulté

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal