网站建设资讯版块如何做用户运营,wordpress论坛,网站建设工具 公司,网页制作语言Apache arrow顶级项目调试 arrow官方从7.x版本开始提供了一个gdb工具#xff0c;叫做gdb_arrow.py#xff0c;可以在仓库里面下载下来。 调试原理可以阅读之前写的文章#xff1a; 玩转C调试之Python的GDB库增强 使用办法非常简单#xff0c;直接#xff1a; source /code… Apache arrow顶级项目调试 arrow官方从7.x版本开始提供了一个gdb工具叫做gdb_arrow.py可以在仓库里面下载下来。 调试原理可以阅读之前写的文章 玩转C调试之Python的GDB库增强 使用办法非常简单直接 source /code/arrow/cpp/gdb_arrow.py 如果在gdb里面source没报错那么恭喜你加载成功。 在随后的print arrow的内部结构时便可以直接以可读的形式展示出来了。 当然还可能非常不幸会报错各种语法错误下面来简单说一下解决办法。 例如 File /code/arrow/cpp/gdb_arrow.py, line 60ffrom GDB\s response:\n{s})^
SyntaxError: invalid syntax gdb_arrow.py脚本只支持python3以上版本如果是python2自然就出错了例如上面的语法错误。 在gdb里面可以检查一下自己的python脚本 (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方式安装了一个比较新的版本就没问题了。 下面来看看使用脚本与不使用脚本调试的显示情况吧。 默认调试 (gdb) p *schema
$2 (std::__shared_ptr_accessarrow::Schema, (__gnu_cxx::_Lock_policy)2, false, false::element_type ) 0x5a2dd0: {arrow::detail::Fingerprintable {_vptr.Fingerprintable 0x7ffff786fe70 vtable for arrow::Schema16, fingerprint_ {_M_b {_M_p 0x0}}, metadata_fingerprint_ {_M_b {_M_p 0x0}}}, arrow::util::EqualityComparablearrow::Schema {No data fields}, arrow::util::ToStringOstreamablearrow::Schema {No data fields}, impl_ {_M_t {std::__uniq_ptr_implarrow::Schema::Impl, std::default_deletearrow::Schema::Impl {_M_t {std::_Tuple_impl0, arrow::Schema::Impl*, std::default_deletearrow::Schema::Impl {std::_Tuple_impl1, std::default_deletearrow::Schema::Impl {std::_Head_base1, std::default_deletearrow::Schema::Impl, true {std::default_deletearrow::Schema::Impl {No data fields}, No data fields}, No data fields}, std::_Head_base0, arrow::Schema::Impl*, false {_M_head_impl 0x5a2790}, No data fields}, No data fields}}, No data fields}}} 脚本调试 (gdb) p *schema
$3 (std::__shared_ptr_accessarrow::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 (gdb) p *b1
$4 (std::__shared_ptr_accessarrow::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又更加方便了。