ホームページ >バックエンド開発 >Python チュートリアル >ライブ Python アプリケーションのスタック トレースをその場で明らかにするにはどうすればよいですか?

ライブ Python アプリケーションのスタック トレースをその場で明らかにするにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-29 21:16:02733ブラウズ

How Can I Reveal the Stack Trace of a Live Python Application on the Fly?

ライブ Python アプリケーションのスタック トレースを明らかにする

Python の安定性にもかかわらず、アプリケーションがデッドロックに遭遇したり、予期せずフリーズしたりすることがあります。これらの問題の根本原因を特定するのは難しい場合があります。

オンザフライ スタック トレース検査

実行中の Python プログラムの現在の状態を把握するには、便利なツールが「オンザフライ」スタック トレース。これにより、実行されている正確なコードを検査し、問題の原因を特定できる可能性があります。

オンザフライ スタック トレースの実装

モジュールを使用してオンザフライ スタック トレースを有効にすることができます。 -フライスタックトレース検査。このモジュールは Unix システム上でのみ動作し、シグナルを利用します:

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

def debug(sig, frame):
    d={'_frame':frame}
    d.update(frame.f_globals)
    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)</code>

使用法

このモジュールを使用するには、プログラムの初期化中に listen() を呼び出すだけです:

<code class="python">listen()</code>

プログラムで問題が発生した場合は、kill を使用するか、Python 内で SIGUSR1 シグナルを送信します。

<code class="python">os.kill(pid, signal.SIGUSR1)</code>

これにより、プログラムが中断され、実行ポイントで対話型の Python コンソールが開きます。スタック トレースを調べて変数を調べて、問題の原因を特定できます。

このアプローチでは、信号がトリガーされたときに I/O 操作が中断される可能性があることに注意してください。

より広範なデバッグについては、別のスクリプトを使用してパイプ経由の通信を確立し、バックグラウンド プロセスのデバッグを可能にすることができます。

以上がライブ Python アプリケーションのスタック トレースをその場で明らかにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。