3

C プログラムのデバッグ中に python2.6 の gdb モジュールを使用しており、インスタンスの「.Type」に基づいて gdb.Value インスタンスを Python 数値オブジェクト (変数) に変換したいと考えています。

たとえば、C プログラムSomeStruct->some_float_val = 1./6;を を介して Python gdb.Value に変換しsfv=gdb.parse_and_eval('SomeStruct->some_double_val')ますが、これを倍精度浮動小数点の Python 変数に変換します。そのことstr(sfv.type.strip_typedefs())=='double'と、そのサイズが 8B であることを知っているため、dbl=float(str(sfv))またはを使用して文字列を変換するだけValue.string()ではなく、struct正しい double 値を取得するために使用するバイト。

私の検索ポイントから返されたすべてのリンクはhttps://sourceware.org/gdb/onlinedocs/gdb/Values-From-Inferior.html#Values-From-Inferiorですが、 Value インスタンスを python に変換する方法がわかりません変数をきれいに、値が C メモリにさえなく、gdb.Value.address を表していたとします (したがって、使用できませんInferior.read_memory())。文字列値をキャストせずに、これを Python int に変換するにはどうすればよいでしょうか?

4

2 に答える 2

5

またはValueを使用して直接変換できます。intfloat

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

float(gdb.Value(0))ただし、機能しないため、システムに少なくとも 1 つの不具合があるようです。

于 2015-04-29T02:56:40.757 に答える