我正在通过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()
函数的局部变量?
换句话说,我如何检查嵌套在调用堆栈中的函数的局部变量?
重要说明:我不要希望continue
或step
进入run()
来检查其本地变量。我想检查(从我当前的,暂停的角度来看)当前嵌套在调用堆栈中的run()
堆栈帧中的局部变量。
答案 0 :(得分:10)
(i)pdb
提供命令up
和down
,允许您通过调用堆栈进行旅行,这样您就可以访问更高级别的呼叫并检查那里的局部变量。
重温一些调试教程,第二次尝试时可能会很清楚。