Как получить доступ к указателю данных pybind11 array_t <> в отладчике - PullRequest
0 голосов
/ 08 мая 2020

Я хотел бы получить доступ к указателю данных для 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>'

1 Ответ

0 голосов
/ 08 мая 2020

На основе реализации array_t::data в numpy.h pybind11 решением является использование pybind11::detail::array_proxy для доступа к указателю данных:

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