pdb显示堆栈帧,所有局部变量都设置为无

时间:2016-03-18 11:15:30

标签: python debugging stack pdb

我正在调试C库的一些导入错误,要么使用py.test --pdb运行测试套件,要么在ipython中调用错误导入并在错误上删除pdb实例。到目前为止没有什令我感到困惑的是,似乎有一些堆栈框架将所有局部变量设置为None

(Pdb) dir()
['LLVMContextRef', 'LLVMExecutionEngineRef', 'LLVMFunctionsIterator', 'LLVMGlobalsIterator', 'LLVMMemoryBufferRef', 'LLVMModuleRef', 'LLVMObjectCacheRef', 'LLVMPassManagerBuilderRef', 'LLVMPassManagerRef', 'LLVMTargetDataRef', 'LLVMTargetLibraryInfoRef', 'LLVMTargetMachineRef', 'LLVMTargetRef', 'LLVMTypeRef', 'LLVMValueRef', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '_decode_string', '_is_shutting_down', '_lib_dir', '_lib_name', '_make_opaque_ref', 'ctypes', 'get_library_name', 'os', 'x']
(Pdb) [locals()[x] for x in dir() if x != '__builtins__']
[None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, 'x']
(Pdb) down
> /usr/lib/python2.7/ctypes/__init__.py(365)__init__()
-> self._handle = _dlopen(self._name, mode)
(Pdb) dir()
['_FuncPtr', 'flags', 'handle', 'mode', 'name', 'self', 'use_errno', 'use_last_error']
(Pdb) name
'libllvmlite.so'
(Pdb) 

如图所示,这不会影响所有帧。在损坏的框架中,__builtins__似乎是唯一保持不变的东西。由于变量正确地传递到下部框架并且在那里可见,我认为这不是代码本身的问题而是pdb的问题。任何可能导致这种情况的想法,或者如何深入研究它?

0 个答案:

没有答案