首页 > 解决方案 > 如何在调试器中访问 pybind11 array_t<> 数据指针

问题描述

我想在进入pybind11::array_t<T>调试器时访问类型化 NumPy 数组包装器的数据指针。如下所示,调试器不知道 的类型array_t<T>,因此data(...)/mutable_data(...)访问器不可用。

(lldb) p o
(pybind11::array_t<unsigned long long, 16>) $24 = {
  pybind11::array = {
    pybind11::buffer = {
      pybind11::object = {
        pybind11::handle = (m_ptr = '0x10872fe40')
      }
    }
  }
}
(lldb) p o.data()
error: no member named 'data' in 'pybind11::array_t<unsigned long long, 16>'
(lldb) p o.data(0)
error: no member named 'data' in 'pybind11::array_t<unsigned long long, 16>'

标签: c++pybind11

解决方案


基于array_t::datapybind11's 中的实现numpy.h,一个解决方案是使用pybind11::detail::array_proxy来访问数据指针:

(lldb) p ((uint64_t*)pybind11::detail::array_proxy(o.m_ptr)->data)[652]
(uint64_t) $26 = 87112

推荐阅读