c++ - 如何在调试器中访问 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>'
解决方案
基于array_t::data
pybind11's 中的实现numpy.h
,一个解决方案是使用pybind11::detail::array_proxy
来访问数据指针:
(lldb) p ((uint64_t*)pybind11::detail::array_proxy(o.m_ptr)->data)[652]
(uint64_t) $26 = 87112
推荐阅读
- java - 为什么我的 log4j 消息没有出现在日志文件中?
- php - 如何让 PHPMailer 在我的 Web 服务器中工作,就像它在我的 Windows 上的本地 XAMPP 服务器中一样?
- mongodb - 带有 MongoDB 的烧瓶登录 usermixin 类
- react-native - 无限组件渲染
- sql-server - Spring Data 和 SQL Server 在关键字“as”错误附近出现语法错误
- html - 当视口为 100vh 时,防止 Safari 移动设备上的额外滚动
- ios - 无法通过 - 线程 1:致命错误:在展开可选值时意外发现 nil
- python - 如何使用多行正则表达式完成删除整行?
- amazon-web-services - MissingRequiredParameter:参数中缺少必需的键“FunctionName”
- c++ - 获取频率最低的两个节点并为它们创建父节点(霍夫曼树)