0

テスト用の新しいコードを展開するときに呼び出すことができるツールを構築したいと考えています。このツールは、実行のすべての行をキャプチャして評価し、それらをファイルに出力して、実行が終了した後もトレースしてデバッグできるようにします。これは、コードのすべての行の戻り値を評価し、そのコード行とその行の戻り値を別の列に出力するデバッガーと考えてください。これは、コードも実行しているためです。例えば:

Timestamp           File-Line    Source Code                       Debug Watcher        
----------------    ---------    -------------------------------   -----------------
20130109-10:18AM    test.py-1    import mathy  
20130109-10:18AM    test.py-2    x = 1        # inline comments   return: x:1
20130109-10:18AM    test.py-3    ans = divide(x,2)                call: math_functions.py-55:divide(dividend:1, divisor:2) 
20130109-10:18AM    mathy.py-56     return divedend / divisor     divide() function return: 0.5
20130109-10:18AM    test.py-4    print "Got %d"%ans               call: print : "Got 0.5"
etc...

実行が別々の関数やファイルなどを移動するときに、実行を追跡する方法がわかりますか? これにより、大量のログ データが生成される可能性があるため、制限サイズにクリップされる可能性があります。また、辞書や配列などの大きなデータ構造をパントし、それらを処理する特殊なケースをいくつか作成する必要があります。

トレースバックを使用する前にこのようなものを作成しましたが、まったく正しく機能しませんでした。もっと洗練されたものがすでに存在するのではないかと思っています。そうでない場合、どのようにしますか?ありがとう。

4

1 に答える 1

1

トレース デコレータと sys.settrace の 2 つの場所を調べることをお勧めします。

デコレータのトレース

このアプローチを使用して、本番コードをデバッグしていました。実行された Python コードのすべての行をログに記録するわけではなく、関連するすべての変数を評価するわけではないことに注意してください。しかし、私のタスクには十分でした-すべての関数呼び出し、渡された引数、および戻り値をログに記録します。ロギング フレームワークを使用するため、この情報の送信先 (画面、ログ ファイルなど) を構成できます。また、トレースを開始するには、トレーサをモジュール、クラス、またはメソッドにアタッチする必要があります。

デバッグ用のトレース デコレーター

短い使用例を次に示します。

import logging
logging.basicConfig(level=logging.DEBUG)

from trace_decorator import trace, attach

class TClass(object):
    def method(self,arg=1):
        print "using TClass.method()"
        self.method2(3)

    def method2(self,arg=2):
        d=1

@trace
def main():
    t = TClass()
    t.method(2)

そしてプログラム出力

DEBUG:main:>>> main()
DEBUG:DEBUG:>>> TClass.method( self = <TClass object at 0x25b87d0>, arg = 2 )
DEBUG:DEBUG:>>> TClass.method2( self = <TClass object at 0x25b87d0>, arg = 3 )
DEBUG:DEBUG:<<< TClass.method2
DEBUG:DEBUG:<<< TClass.method
DEBUG:main:<<< main

詳細と使用例については、レシピのリンクを確認してください。

sys.settrace

あなたが説明したツールは、Pythonデバッガーに非常に似ています。いくつかの python デバッガーを挙げると: PyDev Eclipse プラグインには素晴らしいものがあります) pdb しかし、ユーザーがコード内の変数を評価する場所を選択したときに対話型デバッグを行う代わりに、すべての行でプログラムの状態をキャプチャする必要があります。とにかく、Pythonデバッガーは、そのようなツールを実装する方法を探す最初の場所です。

Python デバッガーは、python のsys.settraceを使用してトレース ハンドラー メソッドを配置します。 sys.settrace メソッドの使用方法については、stackoverflow サイトで多くの議論があります。しかし、それらのほとんどは、この方法を使用することに対する予防措置を講じています。プログラムを簡単に壊すことができます。これを使用すると、プログラムの実行が非常に遅くなります。

これは、sys.settrace に基づく python トレース ツールです。試してみてください。Python 2.7 が必要であり、プログラムは IDE やインタラクティブ シェルではなく、厳密にコマンド ラインから開始する必要があることに注意してください。https://code.google.com/p/pytracemonitor/

于 2013-01-11T23:12:49.167 に答える