我正在调试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的问题。任何可能导致这种情况的想法,或者如何深入研究它?