上下文:
我正在通过pdb(python调试器)运行一些python代码。当我设置并随后命中一个断点时,我可以使用以下方法检查局部变量:
(Pdb) locals()
这会打印出一个很好的dict,其中包含当前范围内暂停的局部变量的名称、值对。很完美!
我还可以使用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()
函数的局部变量?换句话说,如何检查嵌套在调用堆栈中的函数的局部变量?
重要的澄清:我不想让
continue
或step
进入run()
来检查它的局部变量。我想(从我当前暂停的角度)检查当前嵌套在调用堆栈中的run()
堆栈帧中的局部变量。 最佳答案
(i)pdb
提供命令up
和down
,允许您通过调用堆栈进行传输,这样您就可以访问更高级别的调用并检查其中的局部变量。
重新访问一些调试教程,第二次尝试可能会使它变得清晰。
关于python - PDB:如何检查嵌套堆栈帧中函数的局部变量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23485823/