【发布时间】:2012-01-24 14:04:00
【问题描述】:
我正在尝试使用 GDB 的漂亮打印工具来显示自定义 C++ 矩阵类。
该课程非常标准,您可以在任何地方找到。它是由类型参数化的模板,可以使用 mat[i][j] 等 C 类型表示法访问。这首先隐式返回另一个表示行或列的模板“Slice”类,可以再次由 [] 运算符访问以提取数据。该类本身使用普通的 C 数组进行存储,但它正在对其实施一些技巧,例如预分配更大矩阵的选项、启用非零开始、使用 stride 等。该类没有本机打印接口,我不能修改它,也不能轻易链接到我自己的代码。
自定义功能使得在 Python 中重现直接数据访问代码变得很痛苦。但这有必要吗?一般来说:为什么漂亮的打印要重现访问数据的逻辑?我不能只使用 C++ 调用并使用 [] 运算符来打印第 i,j 个元素吗?在此类请求期间,Slice 类在 GDB 中是临时的,这一事实使这一点更加复杂。
我也是 python 和 GDB 脚本的初学者。我试图破解示例以用 gdb.execute 调用替换数据访问,但我不知道如何从 to_string 函数访问对象名称,所以我可以使用类似 gdb.execute(??? + '[] +str(i)+']',假,真)。
我想知道最有效的方法是什么。
【问题讨论】:
标签: c++ python gdb pretty-print