Apache arrow顶级项目调试

Apache arrow顶级项目调试

arrow官方从7.x版本开始提供了一个gdb工具,叫做gdb_arrow.py,可以在仓库里面下载下来。

调试原理可以阅读之前写的文章:

玩转C++调试之Python的GDB库增强

使用办法非常简单,直接:

go 复制代码
source /code/arrow/cpp/gdb_arrow.py

如果在gdb里面source没报错,那么恭喜你加载成功。

在随后的print arrow的内部结构时,便可以直接以可读的形式展示出来了。

当然,还可能非常不幸,会报错,各种语法错误,下面来简单说一下解决办法。

例如:

go 复制代码
File "/code/arrow/cpp/gdb_arrow.py", line 60
  f'from GDB\'s response:\n"""{s}"""')
  ^
SyntaxError: invalid syntax

gdb_arrow.py脚本只支持python3以上版本,如果是python2自然就出错了,例如:上面的语法错误。

在gdb里面可以检查一下自己的python脚本:

go 复制代码
(gdb) py
>import sys
>print(sys.version)
>end
3.8.15 (default, Mar  9 2023, 21:22:48) 
[GCC 10.2.1 20210130 (Red Hat 10.2.1-11)]

可以看到输出了python3,那么到这里可以验证python版本没问题,一般来说就是可以source成功的,我这边一开始这样查看出来的版本是python2,自然就source挂了,最后通过源码安装gdb方式,安装了一个比较新的版本就没问题了。

下面来看看使用脚本与不使用脚本调试的显示情况吧。

  • 默认调试
go 复制代码
(gdb) p *schema
$2 = (std::__shared_ptr_access<arrow::Schema, (__gnu_cxx::_Lock_policy)2, false, false>::element_type &) @0x5a2dd0: {<arrow::detail::Fingerprintable> = {
    _vptr.Fingerprintable = 0x7ffff786fe70 <vtable for arrow::Schema+16>, fingerprint_ = {_M_b = {_M_p = 0x0}}, metadata_fingerprint_ = {_M_b = {
        _M_p = 0x0}}}, <arrow::util::EqualityComparable<arrow::Schema>> = {<No data fields>}, <arrow::util::ToStringOstreamable<arrow::Schema>> = {<No data fields>}, impl_ = {
    _M_t = {<std::__uniq_ptr_impl<arrow::Schema::Impl, std::default_delete<arrow::Schema::Impl> >> = {
        _M_t = {<std::_Tuple_impl<0, arrow::Schema::Impl*, std::default_delete<arrow::Schema::Impl> >> = {<std::_Tuple_impl<1, std::default_delete<arrow::Schema::Impl> >> = {<std::_Head_base<1, std::default_delete<arrow::Schema::Impl>, true>> = {<std::default_delete<arrow::Schema::Impl>> = {<No data fields>}, <No data fields>}, <No data fields>}, <std::_Head_base<0, arrow::Schema::Impl*, false>> = {_M_head_impl = 0x5a2790}, <No data fields>}, <No data fields>}}, <No data fields>}}}
  • 脚本调试
go 复制代码
(gdb) p *schema
$3 = (std::__shared_ptr_access<arrow::Schema, (__gnu_cxx::_Lock_policy)2, false, false>::element_type &) @0x5a2dd0: arrow::Schema with 3 fields = {["fd0"] = arrow::int32(), 
  ["fd1"] = arrow::uint8(), ["fd2"] = arrow::int16()}

再试试batch

go 复制代码
(gdb) p *b1
$4 = (std::__shared_ptr_access<arrow::RecordBatch, (__gnu_cxx::_Lock_policy)2, false, false>::element_type &) @0x5a2a90: arrow::RecordBatch with 3 columns, 10 rows = {
  ["fd0"] = arrow::ArrayData of type arrow::int32(), length 10, offset 0, null count 0 = {440260352, 1427803791, 1601077171, -300415297, 1521318915, -1491074194, -1019370501, 
    -876914235, 791665453, -229504221}, ["fd1"] = arrow::ArrayData of type arrow::uint8(), length 10, offset 0, null count 0 = {0, 215, 61, 26, 143, 142, 26, 85, 179, 127}, 
  ["fd2"] = arrow::ArrayData of type arrow::int16(), length 10, offset 0, null count 0 = {-10496, 6717, -29041, 21786, 32691, 24430, 1727, -4584, 31747, 23213}}

可以看到的是非常的直观!

以后调试arrow又更加方便了。

相关推荐
文慧的科技江湖2 天前
2026年10月4日充电桩行业晚报:当“只充80%“成为通行规则,行业开始管单车占桩时长 | 慧知开源充电桩平台
开源·apache·新能源·虚拟电厂·充电桩·ocpp·v2g
nvd114 天前
# 从 192 秒到 13 秒:Apache Flink 批处理极速调优实战记录
大数据·flink·apache
众链网络5 天前
景区票务系统选型的技术尽调清单:从并发、数据到二次开发的 12 个必查项
apache·景区票务系统
AllData公司负责人6 天前
AllData数据中台物联网实时平台|集成 Apache StreamPipes,MQTT工业物联网数据实时预警实践案例
大数据·数据库·人工智能·物联网·apache·工业物联网·streampipes
白帽攻防录7 天前
SRC 挖洞:Apache Tomcat 加密拦截器绕过深度复盘,CVE-2026-34486 fail-open 一行代码怎么打穿集群通信
java·网络安全·tomcat·apache
筑梦之路7 天前
Kafka KRaft 模式 Kubernetes 部署手册(StatefulSet + apache/kafka 官方镜像)——筑梦之路
kafka·kubernetes·apache
网络豆23 天前
Apache Maven 鸿蒙 PC 适配全记录:把 JVM 构建工具交付到 HiShell
maven·apache·harmonyos
网络豆23 天前
Apache Hive 鸿蒙 PC 适配全记录:以 Qt 客户端打通 HiveQL、监控与元数据访问
hive·apache·harmonyos
网络豆23 天前
Apache HBase 鸿蒙 PC 适配全记录:用 Qt 原生客户端打通 REST 管理与数据读写
apache·hbase·harmonyos
无巧不成书021824 天前
Apache Tomcat 9 下载全指南(Windows,Linux,macOS):版本选型、国内镜像、SHA-512 与 PGP 完整性校验
windows·tomcat·apache