0

現在動作している関数のツリーを表示するクラスを書きたいと思います。つまり、次のことを意味します。

関数 A が最初に関数 B を呼び出し、次に関数 C を呼び出し、関数 C が関数 D を呼び出すとします。時間 t = 1 で、B が実行されているので、stdout を次のようにします。

Root: function A -> running properly, called B
2-nd: function B -> running properly

時間 t = 2 で、B は A に戻ったので、stdout は次のようになります。

Root: function A -> running properly, B returned

時刻 t = 3 で、A は C を呼び出しました。時刻 t = 4 で、C は D を呼び出しました。stdout は次のようになります。

Root: function A -> running properly, B returned, called C
2-nd: function C -> running properly, called D
3-rd: function D -> running properly

時間 t = 5 で、D が戻ってきました。時間 t = 6 で、C が戻ってきました。標準出力は次のようになります。

Root: function A -> running properly, B returned, C returned

時間 t = 7 で、関数 A は以下を返しました。

Root: function A -> Done

ロガーオブジェクトを作成して渡す以外に、これを自動化するよりエレガントな方法はありますか? A または B がマルチスレッド プロセスの場合はどうなるでしょうか。

どんな提案でも大歓迎です。ありがとうございました!

4

1 に答える 1

1

Python 内のtrace モジュールを見てください。このモジュールを使用して、注釈付きのトレース レポートを生成できます

Python docsのtraceモジュールの定義:

トレース モジュールを使用すると、プログラムの実行をトレースし、注釈付きのステートメント カバレッジ リストを生成し、呼び出し元と呼び出し先の関係を出力し、プログラムの実行中に実行された関数を一覧表示できます。別のプログラムまたはコマンドラインから使用できます。

于 2013-08-21T17:28:28.017 に答える