2

我尝试使用 gdb 为 STL 设置漂亮打印:http: //gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/并根据说明运行它

并按照以下说明修复了 python 的问题: GDB 漂亮打印 ImportError: No module named 'printers'

现在在采购gdbinit file.

但是我error在尝试打印multiMap时遇到了以下问题:

(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
4

2 回答 2

1

我能够使它工作。我的应用程序同时使用 c++ 和 python。因此,我的环境始终包含 PYTHONHOME/PATH 设置,该设置是与用于安装 gdb 的 python 不同的 python 版本。我用完全相同的python重新安装了gdb,它现在工作正常。谢谢你的提示,汤姆。

于 2015-03-03T11:57:02.787 回答
0

这个答案只是为了强调@Tom Tromey 的评论建议:

set python print-stack full

这是 GDB 在 GDB python 漂亮打印机中引发异常时打印完整堆栈跟踪所需要的,例如:

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>

于 2021-01-19T13:01:43.987 回答