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

2024-06-16 11:54:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我在调试一个C程序时使用python2.6的gdb模块,并且想转换一个gdb.价值实例转换为基于实例的'.Type'的python数字对象(变量)。在

例如,将C程序的SomeStruct->some_float_val = 1./6;转换为Pythongdb.价值通过sfv=gdb.parse_and_eval('SomeStruct->some_double_val'),然后将其转换为一个双精度浮点python变量——知道str(sfv.type.strip_typedefs())=='double',其大小为8B——而不只是通过使用dbl=float(str(sfv))Value.string()来转换字符串,而是类似于使用struct解压字节以获得正确的双精度价值观。在

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


Tags: 实例字符串程序value精度valsomefloat
1条回答
网友
1楼 · 发布于 2024-06-16 11:54:53

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

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

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

相关问题 更多 >