2011-10-27 38 views
12

私はpdbを実行したい、コードをステップ実行し、ある時点でいくつかの名前で指し示された値を変更する。だから、私は 'stationLat'という名前で指されている値を変更したいかもしれません。しかし、私はできないようです。ここに例があります:pdbを使用してPythonをデバッグするときに値を変更するにはどうすればよいですか?

>>> import extractPercentiles 
>>> import pdb 
>>> pdb.run("extractPercentiles.extractOneStation()") 
> <string>(1)<module>()->None 
(Pdb) s 
--Call-- 
> /scratch/extractPercentiles.py(96)extractOneStation() 
-> def extractOneStation() : 
(Pdb) tbreak 132 
Breakpoint 3 at /scratch/extractPercentiles.py:132 
(Pdb) c 

Deleted breakpoint 3 
> /scratch/extractPercentiles.py(132)extractOneStation() 
-> stationLon = float(stationLoc[3]) 

私はstationlatの値を変更したいところです。 PDBが、私は新しい値にstationLatを設定することができるように見えますが、私は値を検査するとき、それは変更されません:

(Pdb) stationLat 
-34.171100000000003 
(Pdb) stationLat = -40 
(Pdb) stationLat 
-34.171100000000003 
(Pdb) !stationLat = -40 
(Pdb) stationLat 
-34.171100000000003 
(Pdb) 

あなたは、私が使用してみました見ることができます!同様に成功することはありません。

コマンドデバッガはPythonの文であると想定されており、デバッグ中のプログラムのコンテキストで実行されていると認識していないこと:

PDBマニュアルは、私は、変数を変更することができるはずと言います。 Python文の先頭に感嘆符(!)を付けることもできます。これは、デバッグされているプログラムを検査する強力な方法です。 変数を変更することも可能ですまたは関数を呼び出す

これは範囲の質問ですか?私がpdbを始めたやり方とは関係がありますか?私は埋め込まれた "pdb.set_trace"イディオムを試してみましたが、私は同じ結果を得ました。

読んでいただきありがとうございます。

答えて

9

これはbug in Python 2.6のように見えます。 Python 2.7でこれを実行できるはずです。

+0

ああ:

はこれを試してみてください!ありがとう、ありがとう。多分名前を壊したり、特別な名前空間を使わなければならないと思った。私はフレームスタックの上下も行ってみました。 –

+1

ああ、私はこのプロジェクトのために私はバグをまだ持っている、Python 2.5.2でやり直さなければならないことを記録します。 –

+0

また、割り当てることができない特定の変数があります。 "a"や "b"のようなものです – dtc

0

実際、pdbに新しい値を割り当てると、変数の値が変更されます。しかし、コードを実行せずにpdbの変数を再度読み込もうとすると、元の値にリセットされることがあります。

コードに戻ると、新しい値(-40)が使用されるはずです。

stationLat = -40 
s # step back into code 
stationLat # should display -40 
関連する問題