GDB 漂亮打印:Python 异常<键入"异常.查找错误"> 未注册编解码器搜索函数:找不到编码



我试着用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>

相关内容

最新更新