いろいろ備忘録日記

主に .NET とか Java とか Python絡みのメモを公開しています。

Pythonメモ-51 (PuDB -- コンソール上でIDEみたいなデバッグ環境) (pudb, pdb, full-screen console-based visual debugger for Python)

概要

twitter で以下のようなツイートを発見。

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

とすると、ターミナルが以下のようになりました。

f:id:gsf_zero1:20180109030609p:plain

おお!ってなりました。

エンター押下すると、次は初回起動なので設定画面が表示されました。

f:id:gsf_zero1:20180109030719p:plain

ここで、いろいろ設定できます。とりあえず、以下を設定。

  • 行番号を表示するように。(Show Line Number を ON)
  • 初期テーマが個人的にポップすぎるので変更 (Monokai-256 とかいうのにしてみた)

以下のようになりました。

f:id:gsf_zero1:20180109031042p:plain

すごいですねぇ。IDEとかわらんじゃん。

設定画面を表示するには、Ctrl-P で、ヘルプは ? で出ます。

f:id:gsf_zero1:20180109031246p:plain

IDEみたいに、ちゃんと 変数、スタック、ブレークポイントのエリアが右側にあって 下側に、イミディエイトウィンドウがあります。

ソースコードの移動は、矢印キーでも、j/kでも出来ます。 あとは、pdbと同じ感じで、bでブレークポイント設定したり、nでステップオーバーしたり c で継続したりできます。

いろいろやっている途中がこんな感じです。

f:id:gsf_zero1:20180109031813p:plain

で、プログラムが完了すると以下の画面となります。

f:id:gsf_zero1:20180109032106p:plain

Restartって選ぶと再起動。Quitって選ぶと終了。

で、Examine って選ぶと完了状態に戻って色々試すことが出来ます。これ便利。

f:id:gsf_zero1:20180109032327p:plain

右上に POST-MORTEM MODEって出てるのがその状態。

この状態で、ゆっくりといろいろな情報を調べることが出来ます。

便利すぎて、びっくりしました。pdbより全然いい。

標準モジュールとして取り込んでほしいな。

PuDB の情報

github.com

Welcome to pudb’s documentation! — pudb 2.0.1.7...1...4 documentation

追記

後から、やってみて分かったのですが pudbってWindowsには対応していないのですね・・・。

Pudb :: Anaconda Cloud

pypi.python.org

stackoverflow.com


過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。