如何在用pdb调试python时更改值?

2024-05-12 19:15:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我想运行pdb,单步执行代码,并在某个时刻更改由某个名称指向的值。所以我可能想更改名为“stationLat”的值。但我似乎做不到。举个例子:

>>> 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) 

你看我试过用!同样,没有成功。

pdb手册上说我应该能够改变变量:

调试器无法识别的命令被假定为Python语句,并在被调试程序的上下文中执行。Python语句也可以以感叹号(!)作为前缀。这是一种检查正在调试的程序的强大方法;甚至可以更改变量或调用函数

这是一个范围问题吗?这和我开始pdb的方式有关吗?我尝试了嵌入的“pdb.set_trace”习惯用法,得到了相同的结果。

谢谢你的阅读。


Tags: run代码pyimport名称语句pdb例子
2条回答

这似乎是一个bug in Python 2.6。您应该能够在Python2.7中做到这一点。

实际上,在pdb中分配新值时,变量的值确实会发生更改。但是,如果您尝试在pdb中再次读取变量而不运行代码,它可能会重置为原始值。

如果您回到代码中,您应该看到它将使用您的新值(-40)。

试试这个:

stationLat = -40
s # step back into code
stationLat # should display -40

相关问题 更多 >