gpt4 book ai didi

python - 调试 C 程序时如何将 gdb 值转换为 python 数字对象

转载 作者:行者123 更新时间:2023-11-28 21:51:36 25 4
gpt4 key购买 nike

我在调试 C 程序时使用 python2.6 的 gdb 模块,并希望根据实例的“.Type”将 gdb.Value 实例转换为 python 数字对象(变量)。

例如通过 sfv=gdb.parse_and_eval('SomeStruct->some_double_val') 将我的 C 程序的 SomeStruct->some_float_val = 1./6; 转换为 Python gdb.Value,但是然后将其转换为 double 浮点 python 变量——知道 str(sfv.type.strip_typedefs())=='double' 并且它的大小为 8B——而不只是通过字符串进行转换使用 dbl=float(str(sfv))Value.string() 而是使用 struct 解包字节以获得正确的双重值(value)。

从我的搜索点返回的每个链接 https://sourceware.org/gdb/onlinedocs/gdb/Values-From-Inferior.html#Values-From-Inferior ,但我看不到如何将 Value 实例干净地转换为 python 变量,说 Value 甚至不在 C 内存中,而是表示 gdb.Value.address (所以不能使用 Inferior.read_memory( )),如何在不转换字符串值的情况下将其转换为 Python int?

最佳答案

您可以使用 intfloat 直接从 Value 转换它:

(gdb) python print int(gdb.Value(0))
0
(gdb) python print float(gdb.Value(0.0))
0.0

不过,系统中似乎至少存在一个故障,因为 float(gdb.Value(0)) 不起作用。

关于python - 调试 C 程序时如何将 gdb 值转换为 python 数字对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29932049/

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