[解決済み】実行中のPythonアプリケーションのスタックトレースを表示させる。
2022-03-25 05:42:30
質問
Pythonのアプリケーションが時々動かなくなるのですが、原因がわかりません。
Pythonインタプリタにシグナルを送り、実行中のコードを正確に表示させる方法はありますか?
スタックトレースのようなものでしょうか?
関連する質問
解決方法は?
このような状況、つまり、あるプロセスが長い間実行されているが、時々不明で再現性のない理由でスタックするような場合に使用するモジュールがあるんだ。 これは少し厄介で、unix上でしか動作しません(シグナルが必要です)。
import code, traceback, signal
def debug(sig, frame):
"""Interrupt running process, and provide a python prompt for
interactive debugging."""
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() 関数を呼び出して (site.py に記述して、すべての python プログラムに使わせることもできます)、実行させるだけです。 どの時点でも、killやpythonを使用して、プロセスにSIGUSR1シグナルを送信します。
os.kill(pid, signal.SIGUSR1)
これにより、プログラムは現在いる地点で Python コンソールにブレークし、スタックトレースを表示し、変数を操作することができます。 実行を続けるには control-d (EOF) を使ってください (ただし、シグナルを送った時点でおそらくすべての I/O などに割り込むことになるので、完全に非侵入型ではないことに注意してください)。
同じことをする別のスクリプトがありますが、こちらはパイプを通して実行中のプロセスと通信します(バックグラウンドのプロセスなどをデバッグできるようにするためです)。 ここに載せるにはちょっと大きいですが、このスクリプトを パイソン料理本レシピ .
関連
-
[解決済み】TypeError: unhashable type: 'numpy.ndarray'.
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] バイトを文字列に変換する
-
[解決済み] Pythonの辞書からキーを削除するにはどうしたらいいですか?
-
[解決済み] なぜC++はPythonよりもstdinからの行の読み込みが遅いのですか?
-
[解決済み] スタックトレースを文字列に変換するにはどうすればよいですか?
-
[解決済み] Pythonでファイル名から拡張子を抽出する
-
[解決済み] Javaで現在のスタックトレースを取得するにはどうすればよいですか?
-
[解決済み] スタックトレースとは何ですか、またアプリケーションのエラーをデバッグするためにスタックトレースをどのように使用できますか?
-
[解決済み】例外をスローしたときにJavaScriptのスタックトレースを取得するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Python関数の高度な応用を解説
-
パッケージングツールPyinstallerの使用と落とし穴の回避
-
pyCaret効率化乗算器 オープンソース ローコード Python機械学習ツール
-
PythonによるExcelファイルの一括操作の説明
-
[解決済み】ilocが「IndexError: single positional indexer is out-of-bounds」を出す。
-
[解決済み】Flask ImportError: Flask という名前のモジュールがない
-
[解決済み】 TypeError: += でサポートされていないオペランド型: 'int' および 'list' です。
-
[解決済み】ValueError: xとyは同じサイズでなければならない
-
[解決済み】Pythonのコードでメソッドから現在のコールスタックを表示する
-
[解決済み] Pythonデバッグのヒント [終了しました]。