如何在c/c++场景下调试rust?

0.效果

背景:最近数据库项目中使用到了rust,是一个扩展,数据库是c写的,也就是c会调用rust,当gdb调试进程时,rust侧代码啥都打不出来,非常苦恼,本文则是解决这个问题。

直接gdb,啥都看不到,全是内部实现。

5cfc08d5b3070dfd6c4aaf0d453cd986.jpeg

使用脚本之后,可以清楚看到内容。

e2e709f15db3f473de4f6d6d646b249c.jpeg

1.如何配置

rust官方提供了rust-gdb调试工具,如果你的代码是rust二进制,直接rust-gdb调试是没有问题的,啥都不用做,把rust-gdb下载下来直接用即可,但是我们的场景是c调用rust,而c这边会fork出子进程出来,此时是没有二进制文件的,没法直接使用rust-gdb,因此直接看它的脚本。

在我们场景,使用方式如下:

gdb -p pid

source /home/light/rust-master/src/etc/gdb_load_rust_pretty_printers.py

此时没有报错,就可以使用了,如何做到这一点呢?这里可以直接修改

第一步:下载源码

https://github.com/rust-lang/rust/tree/master/src/etc

第二步:修改脚本

gdb_load_rust_pretty_printers.py,去掉current_objfile(),此时gdb_load_rust_pretty_printers.py文件变为下面这个样子。只需要改下面这个参数即可。

import gdb
import gdb_lookup
gdb_lookup.register_printers(gdb)

第三步:环境配置

将刚才的etc目录设置到python path中。

export PYTHONPATH=$PYTHONPATH:/home/light/rust-master/src/etc

第四步:畅享rust-gdb

此时gdb -p pid,source /home/gpadmin/rust-master/src/etc/gdb_load_rust_pretty_printers.py,便可以像pgprint一样输出直观的结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值