程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

通过直接函数调用进行gdb漂亮打印

发布于2019-11-11 08:08     阅读(639)     评论(0)     点赞(16)     收藏(4)


我正在尝试使用GDB的漂亮打印工具来显示自定义C ++矩阵类。

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

自定义功能使您难以在Python中重现直接数据访问代码。但这有必要吗?通常:为什么漂亮的打印应该重现访问数据的逻辑?我不能只使用C ++调用并使用[]运算符来打印第i,j个元素吗?在此类请求期间,Slice类是GDB中的临时类,这一事实使这一情况更加复杂。

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

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


解决方案


我不能只使用C ++调用并使用[]运算符来打印第i,j个元素吗?

您可以使用gdb.parse_and_evaldocs从漂亮打印机调用劣等(正在调试)过程,但这有几个缺点:

  • 您需要一个“实时”过程来执行此操作(换句话说,当您调试核心转储时,漂亮的打印机将无法工作)
  • 如果劣等品以某种方式损坏,则在其中调用函数可能会使其更加恶化
  • 如果劣等者是多线程的,并且漂亮打印机调用了可能需要锁定的函数(例如malloc),那么您很可能导致漂亮打印机死锁,并且没有任何方法可以从这种死锁中恢复。


所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/149504/05751a465baf70819e05/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

16 0
收藏该文
已收藏

评论内容:(最多支持255个字符)