このBlogは移転しました。今後は aish.dev を御覧ください。

Pythonのトレース情報を表示する disptrace ってのを作ってみた

Pythonには実行したスクリプトの行番号なんかを表示するtraceモジュールというのがあって、デバッグの時などうまく使うとデバッガでブレークポイント仕掛けるより効率的にデバッグできるときもあったりするんだけど、いまいち低機能で使いにくく、あんまり使っている人は見かけない気がしている。

で、ふと思いついて作ってみたのがこちら

http://pypi.python.org/pypi/disptrace

なにをするかというと、収集したトレース情報をHTMLで出力し、ちょっとしたJavaScriptを仕込んで呼び出しのネストを折りたたんだりできるようにしてみた。こんな感じのHTMLが出力される。

http://www.pythonpath.jp/download/disptrace-sample.html

標準のtrace.Trace()と同じように関数を呼び出し、終わったらDispTrace.render()メソッドでHTMLが生成される。

import disptrace
t = disptrace.DispTrace()
t.runfunc(myfunc)
with open("trace.html", "w") as f:
    f.write(t.render())

ホームディレクトリに .disptrace というファイルを作っておくと、トレースしないモジュールやディレクトリを指定できる。

[disptrace]
ignorepath=/usr/local/lib/python2.6/dist-packages/:/usr/lib/python2.6/plat-linux2
ignoremodule=sys, os

ignorepathで指定したディレクトリにあるモジュールは、ログ情報を収集しない。複数のディレクトリを指定する場合は、パス区切り(Unixでは':', Windowsでは';') で区切る。また、ignoremodule にはログを取得しないモジュールの名前を指定する。複数のモジュールを指定する場合は ',' で区切る。