gpt4 book ai didi

python - 如何从 lldb python API 访问 C 数组浮点值

转载 作者:行者123 更新时间:2023-11-30 20:34:50 25 4
gpt4 key购买 nike

我是新使用 python scripting in lldb 。我正在调试 C 代码。

我想将 C float 组的内容复制到 lldb 脚本中的 python 变量中。最终目标是按照完成的方式绘制内容数组 here使用 gdb 和 python。

我正在调试的程序中的 C 数组被声明为 float* buffer;

在 lldb python 脚本中,如果我这样做: buf = lldb.frame.FindVariable ("buffer") buf 仅包含非解引用指针“buffer”(数组的地址)。

如何访问数组的实际值(解除引用)并将它们复制到 python 变量中? gdb有gdb_numpy.to_array 。我看了SBValue.h并尝试了 GetChildAtIndex 方法,但没有成功。

最佳答案

问题是 float * 不是数组,它是指向 float 的指针。它可能指向一个连续分配的 float 组,也可能指向单个 float 组,lldb 无法判断。

因此它的 SBValue 不会是一个包含 N 个子级的数组,其中 N 是您为该数组分配的元素数量。它将有一个值(指针值)和一个子项(指针指向的值)。

但是,使用 Python API 遍历连续数组非常简单:

获取指针:

>>> float_ptr = lldb.frame.FindVariable("float_ptr")

为了方便起见,存储元素的类型:

>>> float_type = float_ptr.GetType().GetPointeeType()

现在遍历数组并打印出元素(在本例中我制作了 10 个 float ):

>>> for i in range (0,9):
... offset = float_ptr.GetValueAsUnsigned() + i * float_type.GetByteSize()
... val = lldb.target.CreateValueFromAddress("temp", lldb.SBAddress(offset, lldb.target), float_type)
... print val
...
(float) temp = 1
(float) temp = 2
(float) temp = 3
(float) temp = 4
(float) temp = 5
(float) temp = 6
(float) temp = 7
(float) temp = 8
(float) temp = 9

关于python - 如何从 lldb python API 访问 C 数组浮点值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41089145/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com