我试着用gdb为STL设置漂亮的打印:http://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/并根据指令运行
并根据以下位置的说明修复了python的问题:GDB漂亮打印ImportError:没有名为';打印机';
现在,在寻找gdbinit file
时没有错误。
但我在尝试打印多映射时遇到了以下error
问题:
(gdb)p mymMap
Python Exception <type 'exceptions.LookupError'> no codec search functions registered: can't find encoding:
Python Exception <type 'exceptions.LookupError'> no codec search functions registered: can't find encoding:
$1=
关于如何解决这个问题,有什么提示吗?
1) 在gdbinit:中的以下stmt之前,已尝试添加导入编解码器
from libstdcxx.v6.printers import register_libstdcxx_printers
2) python安装中存在编解码器模块
version info:
gdb version - 7.5.1;
python in gdb - 2.6.5
我能够让它工作。我的应用程序同时使用c++和python。因此,我的环境总是包含PYTHONHOME/PATH设置,它与用于安装gdb的python版本不同。我用完全相同的python对gdb进行了疯狂的测试,它现在运行得很好。谢谢你的提示,汤姆。
这个答案只是为了突出@Tom Tromey的评论,该评论建议:
set python print-stack full
当在GDB python漂亮的打印机(如:)中出现异常时,GDB需要打印完整的堆栈跟踪
Python Exception <class 'gdb.error'> No type named >.:
但没有任何关于这是在哪里提出的信息。有了上面的配置,人们会得到这样的东西:
@0x7fffffff91f0: Traceback (most recent call last):
File "/home/user/.gdbprinters/eigen/printers.py", line 341, in lookup_function
return pretty_printers_dict[function](val)
File "/home/user/.gdbprinters/eigen/printers.py", line 313, in <lambda>
pretty_printers_dict[re.compile('^Eigen::RefBase<.*>$')] = lambda val: EigenMatrixPrinter("Matrix", cast_eigen_block_to_matrix(val))
File "/home/user/.gdbprinters/eigen/printers.py", line 306, in cast_eigen_block_to_matrix
return val.cast(gdb.lookup_type(type[begin:end]))
gdb.error: No type named >.
{<Eigen::RefBase<Eigen::Ref<Eigen::Array<autodiff::detail::Real<1, double>, -1, 1, 0, -1, 1> const, 0, Eigen::InnerStride<1> > >> = {<Eigen::MapBase<Eigen::Ref<Eigen::Array<autodiff::detail::Real<1, double>, -1, 1, 0, -1, 1> const, 0, Eigen::InnerStride<1> >, 0>> = {<Eigen::ArrayBase<Eigen::Ref<Eigen::Array<autodiff::detail::Real<1, double>, -1, 1, 0, -1, 1> const, 0, Eigen::InnerStride<1> > >> = {<Eigen::DenseBase<Eigen::Ref<Eigen::Array<autodiff::detail::Real<1, double>, -1, 1, 0, -1, 1> const, 0, Eigen::InnerStride<1> > >> = {<Eigen::DenseCoeffsBase<Eigen::Ref<Eigen::Array<autodiff::detail::Real<1, double>, -1, 1, 0, -1, 1> const, 0, Eigen::InnerStride<1> >, 2>> = {<Eigen::DenseCoeffsBase<Eigen::Ref<Eigen::Array<autodiff::detail::Real<1, double>, -1, 1, 0, -1, 1> const, 0, Eigen::InnerStride<1> >, 0>> = {<Eigen::EigenBase<Eigen::Ref<Eigen::Array<autodiff::detail::Real<1, double>, -1, 1, 0, -1, 1> const, 0, Eigen::InnerStride<1> > >> = {<No data fields>}, <No data fields>}, <No data fields>}, <No data fields>}, <No data fields>}, m_data = 0x555555c76580, m_rows = {m_value = 28}, m_cols = {<No data fields>}}, m_stride = {m_outer = {<No data fields>}, m_inner = {<No data fields>}}}, m_object = Eigen::Array<autodiff::detail::Real<1, double>,0,1,ColMajor> (data ptr: 0x0) = {[0] = <error reading variable>