上下文:
我正在通过pdb(python调试器)运行一些python代码。当我设置并随后命中一个断点时,我可以使用以下方法检查局部变量:

(Pdb) locals()

这会打印出一个很好的dict,其中包含当前范围内暂停的局部变量的名称、值对。很完美!
我还可以使用pdbwhere命令看到堆栈跟踪,其结果如下:
  /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()函数的局部变量?
换句话说,如何检查嵌套在调用堆栈中的函数的局部变量?
重要的澄清:我不想让continuestep进入run()来检查它的局部变量。我想(从我当前暂停的角度)检查当前嵌套在调用堆栈中的run()堆栈帧中的局部变量。

最佳答案

(i)pdb提供命令updown,允许您通过调用堆栈进行传输,这样您就可以访问更高级别的调用并检查其中的局部变量。
重新访问一些调试教程,第二次尝试可能会使它变得清晰。

关于python - PDB:如何检查嵌套堆栈帧中函数的局部变量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23485823/

10-10 21:51
查看更多