gpt4 book ai didi

c++ - 我可以在 gdb pretty-print 中直接调用程序的 `operator[]` 吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:26:18 24 4
gpt4 key购买 nike

我正在尝试使用 GDB 的 pretty-print 工具来显示自定义 C++ 矩阵类。

类(class)非常标准,您可以在任何地方找到。它是一个由类型参数化的模板,可以使用 mat[i][j] 等 C 类型符号访问。这首先隐式返回另一个表示行或列的模板“Slice”类,[] 运算符可以再次访问它以提取数据。该类本身使用普通 C 数组进行存储,但它在其上实现了一些技巧,例如预分配更大矩阵的选项、启用非零开始、使用步幅等。该类没有 native 打印接口(interface),我无法修改它,也无法轻松链接到我自己的代码。

自定义功能使得在 Python 中重现直接数据访问代码变得很痛苦。但那有必要吗?一般来说:为什么 pretty-print 要重现访问数据的逻辑?我不能只使用 C++ 调用并使用 [] 运算符来打印第 i,j 个元素吗?事实上,在这样的请求期间,Slice 类在 GDB 中是临时的,这进一步复杂化了这一点。

我也是 python 和 GDB 脚本的初学者。我试图破解示例以用 gdb.execute 调用替换数据访问,但我不知道如何从 to_string 函数访问对象名称,所以我可以使用类似 gdb.execute(??? + '[] +str(i)+']',假,真)。

我想知道这样做最有效的方法是什么。

最佳答案

Cannot I just use C++ calls and use the [] operators to print the i,j-th element?

您可以使用 gdb.parse_and_eval ( docs ) 从 pretty-print 调用劣质(正在调试的)进程,但这有几个缺点:

  • 您需要一个“实时”进程来执行此操作(换句话说,当您调试核心转储时,您的 pretty-print 将无法工作)
  • 如果下级以某种方式损坏,调用其中的函数可能会更严重地损坏它
  • 如果inferior是多线程的,而pretty printer调用了一个可能需要锁的函数(例如malloc),那么你很可能导致pretty printer死锁,并且没有任何方法可以从这种僵局中恢复过来。

关于c++ - 我可以在 gdb pretty-print 中直接调用程序的 `operator[]` 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8578320/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com