Pythonのビジュアルデバッグ(2)
2ヶ月前に考えていた"実行した行をハイライト表示して,どの行を通過したかをリアルタイムにソースコード上で表現する"エディタの実装です.だいぶ前に動く形になっていましたが,そのままにしていて忘れていたので公開してみます.
前エントリ:Pythonのビジュアルデバッグ - tomoemonの日記
タブエディタの基本部分は以下のものを流用させて頂きました.
404 Not Found
wxWdigetsに組み込まれているエディタライブラリScintilla*1を使うとPythonのキーワード強調表示なんかもできるのですが,それと組み合わせると背景の色つけが上手くいかなかったので今回はその他の色つけは全部無しにしています.
ダウンロードと使い方
ダウンロード(43kB)
- (PythonとwxPythonをインストール)
- wx_editor.pyからプログラムを起動します(pythonw.exeで起動するとコマンドプロンプトが出ないので,python.exeで起動した方が良いかも)
起動時に自動的に二つのソースファイル(test.pyとtest2.py)が開かれます.起動したいソースのタブを選択して,F5かCtrl+F5を押すことで実行ステップのカラー表示ができます.
- F5:ハイライト実行
- 通過した行の背景色を緑色に変え,終了時までそのままにしておきます.
- Ctrl+F5:リアルタイム実行
- 通過した行の背景色を緑色に変え,時間経過とともにその色を薄くしていきます.
できることは基本的にこれだけです.ちなみに,デバッグの実行中に別のファイルを開き,そのファイル中のコードが実行された場合も適切に色づけされます.
ユースケース
どんな場面で役立つか.もともとゲーム開発をしている友人が作っていたものを参考にしたので,僕もpygameでなんか作っている最中に動かしながら通過した行を確認したいと思ってます.
あと,サンプルを動かしてて思いましたが,実行した行としてない行がわかりやすいのでif文なんかがまだよく分かっていないプログラミング初心者の学習に使ってもいいのかもと思いました.
現状の問題
- すごく遅くなる
- まだ詳しくプロファイルを取ったわけではありませんが,自作のpygameを使ったゲームを動かしてみたらFPSが30から一桁に落ち込んでしまいました.sys.settrace()を使うとかなり遅くなるかも…どうしたら速くなるかな.
- エディタとして使えない
- Scintillaに依存する部分なのかもしれませんが日本語入力するときに変換ウィンドウが画面左上に行っちゃいます.別にエディタを作りたいとは思ってないので,エディタは別のものを使ってこっちのプログラムをアクティブにしたときに自動的に内容を更新すればいいかなと思ってます.
- py2exeで実行ファイルにするとデバッグが始まらない
- ソースだけじゃなくてバイナリも配ろうとpy2exeで実行ファイルにしてみたのですが,execfile関数が動いてないのか期待する挙動になりませんでした.
*1:Scintillaのドキュメントの和訳をやってるのが姫踊子草の鈴見咲君高さんでびっくりしました.