PDB:如何检查嵌套堆栈框架中函数的局部变量?

问题描述 投票:12回答:2

上下文:

我正在通过PDB(Python调试器)运行一些python代码。设置并随后达到断点时,可以使用以下方法检查局部变量:

(Pdb) locals()

这将显示我暂停的当前作用域中名称,局部变量值对的一个很好的字典。完美!

我还可以使用PDB where命令查看堆栈跟踪,结果如下:

  /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/bdb.py(400)run()
-> exec cmd in globals, locals
  <string>(1)<module>()
  .../main.py(116)<module>()
-> run()
  .../main.py(104)run()
-> res = quicksort(res)
> .../main.py(68)quicksort()
-> if len(v) <= 1:

在此示例输出中,我在quicksort()函数调用的run()函数中暂停。

到目前为止,很好。

问题:

如果可以通过调用quicksort()来检查locals()函数的局部变量,那么我如何类似地检查run()函数的局部变量?

换句话说,如何检查嵌套在调用堆栈中的函数的局部变量?

重要说明:我DO N'T希望将continuestep转换为run()以检查其局部变量。我想检查(从当前暂停的角度来看)当前嵌套在调用堆栈中的run()堆栈框架中的局部变量。

上下文:我正在通过PDB(Python调试器)运行一些python代码。设置并随后达到断点时,可以使用以下命令检查局部变量:(Pdb)locals()这会打印出一个漂亮的字典...

python debugging pdb
2个回答
16
投票

[(i)pdb提供命令updown,使您可以通过调用堆栈进行旅行,这样您可以访问更高级别的调用并在其中检查局部变量。


-1
投票

只需添加到Jan的答案中,就可以通过将其作为u(p)d(own)的参数来指定要向上或向下跳跃的帧数。

© www.soinside.com 2019 - 2024. All rights reserved.