S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
ipythonは便利だ。pdbコマンドをトグルしておくとキャッチしてない例外発生時に自動的にそこに飛んでデバッガも起動してくれる。
従って、予期せぬ例外発生時には即座に対応できるし、また、怪しい箇所に適当に例外を投げるコードを入れておけば、そこからデバッガを開始できる。以下にもその旨解説されている。http://wiki.slash-reader.com/sonota--memo/ipython_
さて任意の関数の実行時にデバッガを起動したい場合どうするか。直前に述べたように、適当なコードをあらかじめ埋めておくのがひとつの方法。でもこれに以下の不満を抱くため、代替について調べた。
・コード埋める作業が面倒
・一時的な作業のためにソースファイルに手を入れたくない
runcallを使えばいけるようだ。
aはとあるクラス、fugaはそのクラスのメソッドとすれば、以下でデバッガが起動する。
In [xx]: import pdb In [xx]: pdb.runcall(a.fuga)引数を渡す場合は以下の様にする。
pdb.runcall(a.fuga, s1='foo', s2='bar')さてこのpdbはpythonのデバッガだが、これに比べ、上で述べたipythonで起動してくれるデバッガは、色付けなんかをしてくれて圧倒的に見易い。こちらを使いたい場合は以下の様にする。(引数の文字列"Linux"で色使いを指定している。これが無いと色はつかない)
In [xx]: import IPython In [xx]: p = IPython.Debugger.Pdb('Linux') In [xx]: p.runcall(a.fuga, s1='foo', s2='bar')
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
最終更新時間: 2010-03-08 22:21