The jonki

呼ばれて飛び出てじょじょじょじょーんき

pudbをもっともっと活用する

以前,pudbの記事を書きましたが,あの時より更に使うようになっていたので,更に色々と便利な機能を紹介したいと思います. pudb?という方は下記の記事をまず御覧ください.今回は発展編ですが,前回の記事の続きというだけで,別に難しいことはありません. www.jonki.net

移動編

  • V, S, B, CCtrl-X での移動

基本的な移動操作になります.Variables, Stack, Breakpoints, Codeのフィールドを自由に移動できます.Ctrl-xでちょっとしたコードを動かしたり確認したりします.各フィールドでの上下移動はj/kが使えます.

  • H: 現在の実行ラインまで戻る

デバッグ中に色々移動したあとに,現在の実行ラインまで戻ります.

  • u/d: スタックの上下移動

スタックトレースを行き来できます.ライブラリの実行などで層が深くなった場合でも,簡単にスタックレイヤー層を上下に移動できます.Stackフィールドにおいて,直接行きたいレイヤー層を選択することが可能です.

実行編

  • t: カーソルのある行まで実行

ブレークポイントを貼って実行 bcでもいけますが,無駄にブレークポイントが増えて不便です.これを覚えておくと地味に便利です.

  • f : 現在の関数の最後まで行く

関数最後までサクッと移動できます.tなどでも代用できますが,「このどうでも良い関数はいいから次!」っていうときに便利です.

Variablesフィールド

  • n: 変数ウォッチ

pudbでも変数のウォッチは可能です!特定条件でのデバッグなどにとても強力です.下記ではミニバッチのインデックスに対してウォッチ変数を作ってみました.

  • custom stringifier設定

Variablesフィールドの表示方法を変更できます.例えば無理やりPytorchのTensorのshapeを表示するようにするとしましょう.~/.config/pudb/custom_stringifier.pyを用意します.

def pudb_stringifier(obj):
    try:
        return (list(obj.shape), 'tensor')
    except:
        return type(obj)

Ctrl-pでVariablesフィールドの設定で,Customのところに先程のファイルを指定します.

そうすることで,Variablesフィールドの各変数を選択した状態でcを押すと,先程のコードが走り,PytorchのTensor変数のshapeが表示されるようになりました.tで型表示,rで中の値を展開という感じにいろいろな表示を切り替えられます.ちなみに先程の設定では,デフォルトはtypeにチェックが入っていますが,Customのところにチェックを入れれば,自動でcキーを押した状態となり,PytorchのTensorであれば,勝手にshapeが表示されます.

Breakpointフィールド

先程のウォッチ変数と似ていますが,ブレークポイントの発動条件を設定できます.コードがある程度進まないと発生しないバグなどの調査時などに便利です.ちなみにdブレークポイントは消せます.

カスタムテーマ

実はカラーテーマも設定できます.方法としては,先程のVariablesフィールドの設定と同様,テーマ設定ファイルを用意して,Ctrl-pで設定画面に行き,ThemeのCustomのところに,そのテーマファイルを指定すればよいです.

公式がテーマのサンプルを公開しています.paletteという辞書型の変数を更新すればよいだけです.フルスクラッチだと辛いので,公式が用意しているテーマからコピペし,気に入らないところだけを書き換えるのが楽です.指定できるカラーは,基本的にXterm colorの256色からです.

例えばブレークポイントのマークとブレークポイント箇所ラインの背景色を変えてみるとこんな感じに変わります.

まとめ

前回の基本的なコマンドに対して,今回はかなり実践的な機能を多く紹介してみました.ショートカットはデフォルトで覚えやすいようになっているので,すぐに覚えられると思います.カスタム機能なども色々いじれて面白いですね.

Enjoy coding!