概要
twitter で以下のようなツイートを発見。
Trying to find a bug in your script? Rerun it with pdb as follows
— Daily Python Tip (@python_tip) 2018年1月8日
python -m pdb example.py
(example.py and output attached)
Too complicated? The text-GUI debugger pudb is here to help
python -m https://t.co/o81VcY0Mt6 example.py#pythontip #pdb #pudb pic.twitter.com/OhLIwcFCPj
pdbは、たまーに触るんだけど、あんまり好きではないです。(普段 PyCharm 使ってるので
へぇって思いながら、ちょっと試してみることにしました。
最終的に、超便利なので、これから必ずインストールしておくモジュールになりましたって話です。
環境つくってみる
てことで、conda でテスト実行用の環境つくり。
$ conda create --name pudb python Solving environment: done ## Package Plan ## environment location: /Users/xxxx/anaconda3/envs/pudb added / updated specs: - python The following NEW packages will be INSTALLED: ca-certificates: 2017.08.26-ha1e5d58_0 certifi: 2017.11.5-py36ha569be9_0 libcxx: 4.0.1-h579ed51_0 libcxxabi: 4.0.1-hebd6815_0 libedit: 3.1-hb4e282d_0 libffi: 3.2.1-h475c297_4 ncurses: 6.0-hd04f020_2 openssl: 1.0.2n-hdbc3d79_0 pip: 9.0.1-py36h1555ced_4 python: 3.6.4-hc167b69_0 readline: 7.0-hc1231fa_4 setuptools: 36.5.0-py36h2134326_0 sqlite: 3.20.1-h7e4c145_2 tk: 8.6.7-h35a86e2_3 wheel: 0.30.0-py36h5eb2c71_1 xz: 5.2.3-h0278029_2 zlib: 1.2.11-hf3cbc9b_2 Proceed ([y]/n)? Preparing transaction: done Verifying transaction: done Executing transaction: done # # To activate this environment, use # # $ conda activate pudb # # To deactivate an active environment, use # # $ conda deactivate
なんか、conda のバージョンを上げたら、ちょっと出力形式が前と変わってますね。 処理中を示すスピナーとか出るようになってる。
conda に PuDB パッケージあるかどうかを調べる。
$ conda activate pudb
$ conda search pudb
Loading channels: done
Name Version Build Channel
pudb 2016.2 py27_0 conda-forge
pudb 2016.2 py34_0 conda-forge
pudb 2016.2 py35_0 conda-forge
pudb 2017.1 py27_0 conda-forge
pudb 2017.1 py35_0 conda-forge
pudb 2017.1.1 py27_0 conda-forge
pudb 2017.1.1 py35_0 conda-forge
pudb 2017.1.1 py36_0 conda-forge
pudb 2017.1.2 py27_0 conda-forge
pudb 2017.1.2 py35_0 conda-forge
pudb 2017.1.2 py36_0 conda-forge
pudb 2017.1.3 py27_0 conda-forge
pudb 2017.1.3 py35_0 conda-forge
pudb 2017.1.3 py36_0 conda-forge
pudb 2017.1.4 py27_0 conda-forge
pudb 2017.1.4 py35_0 conda-forge
pudb 2017.1.4 py36_0 conda-forge
conda-forge チャネル側にはあるみたい。 てことで、インストール
$ conda install pudb Solving environment: done ## Package Plan ## environment location: /Users/xxxx/anaconda3/envs/pudb added / updated specs: - pudb The following packages will be downloaded: package | build ---------------------------|----------------- pudb-2017.1.4 | py36_0 91 KB conda-forge urwid-1.3.1 | py36_0 339 KB conda-forge ------------------------------------------------------------ Total: 430 KB The following NEW packages will be INSTALLED: pudb: 2017.1.4-py36_0 conda-forge pygments: 2.2.0-py36h240cd3f_0 urwid: 1.3.1-py36_0 conda-forge Proceed ([y]/n)? Downloading and Extracting Packages pudb 2017.1.4: ##################################################################################################################### | 100% urwid 1.3.1: ####################################################################################################################### | 100% Preparing transaction: done Verifying transaction: done Executing transaction: done
使ってみる
元のツイートにあるみたいに、使ってみる。
とりあえず、以下のドウデモイイサンプルつくってみました。
""" pudb module sample script. """ def main(): l = list(range(10)) for x in l: print(f'x = {x}') if __name__ == '__main__': main()
pudbを起動してみます。
$ python -m pudb.run pudb_sample.py
とすると、ターミナルが以下のようになりました。
おお!ってなりました。
エンター押下すると、次は初回起動なので設定画面が表示されました。
ここで、いろいろ設定できます。とりあえず、以下を設定。
- 行番号を表示するように。(Show Line Number を ON)
- 初期テーマが個人的にポップすぎるので変更 (Monokai-256 とかいうのにしてみた)
以下のようになりました。
すごいですねぇ。IDEとかわらんじゃん。
設定画面を表示するには、Ctrl-P
で、ヘルプは ?
で出ます。
IDEみたいに、ちゃんと 変数、スタック、ブレークポイントのエリアが右側にあって 下側に、イミディエイトウィンドウがあります。
ソースコードの移動は、矢印キーでも、j/k
でも出来ます。
あとは、pdbと同じ感じで、b
でブレークポイント設定したり、n
でステップオーバーしたり
c
で継続したりできます。
いろいろやっている途中がこんな感じです。
で、プログラムが完了すると以下の画面となります。
Restart
って選ぶと再起動。Quit
って選ぶと終了。
で、Examine
って選ぶと完了状態に戻って色々試すことが出来ます。これ便利。
右上に POST-MORTEM MODE
って出てるのがその状態。
この状態で、ゆっくりといろいろな情報を調べることが出来ます。
便利すぎて、びっくりしました。pdbより全然いい。
標準モジュールとして取り込んでほしいな。
PuDB の情報
Welcome to pudb’s documentation! — pudb 2.0.1.7...1...4 documentation
追記
後から、やってみて分かったのですが pudb
ってWindowsには対応していないのですね・・・。
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場