はじめに
私はプログラミング言語ではpythonをよく使用します。
今回はlua (torch) を触ろうとしたときにpythonと同じようなデバッグツールがないかと探して得られた知見を載せます。前半でpythonでの普段のデバッグを説明して、後半でtorchでのデバッグを説明します。
pythonでのデバッグ
普段デバッグするときはおおよそ以下の2つの手段を取ります。
-
import ipdb; ipdb.set_trace()
をコード中に埋め込む -
python -m pdb <file name>.py
で実行する
ipdb
ipdbはコード内に埋め込んで使用するものです。
非常に便利なデバッガーでinteractive shell (ipythonのインターフェース)が実行時に起動します。
補完が効くため重宝しています。
# 例
a = 3
import ipdb; ipdb.set_trace()
# ここで、interactive shellが起動
# >> a. と入力し、Tabを押すと補完が効く
pdb
実装した直後に実行しても大体エラーで落ちます。
pdbを用いて実行した場合には、エラーはデバッガーによってキャッチされます。
そのためエラーを具体的に検討しやすくなります。
実装した直後のコードを実行する際に使用することがあります。
$ python -m pdb <file name>.py
-> <file name>.pyの一行目
(pdb)
という画面が得られるため、c
と入力しEnterを押します。
するとそのままコードを実行し続け、バグが生じて落ちたときにエラー落ちせずにそこで止まってくれます。
torchでのデバッグ
結論から言うといいものが見つかりませんでした。
あれば教えてください。
debug
これはipdbのようにコード内に埋め込んで使用するものです。
require 'debug'
を最初に実行してライブラリをimportします。
その後、debug.debug()
を止めたい所に入力すると、そこで止まります。
しかしながら、ipdbのように補完が効きません。
補足
探している最中にitorchというものを見つけました。
pythonにおけるjupyterのtorch版です。
installに向けたsetup
https://github.com/facebookarchive/iTorch#requirements
install
https://github.com/facebookarchive/iTorch#installing-itorch
実行方法
https://github.com/facebookarchive/iTorch#how-itorch-works
ipythonのバージョンが新しすぎてitorch notebook
自体は使えませんでしたが、
jupyter notebook
としたときに、kernelとしてpython3以外にitorchが選択できるようになっていました。便利。