10

Python には、C++ 構造体に対応するvar型の変数があります。gdb.Value

構造体にはメソッドがありvoid foo()ます。

この式を評価できますvar['foo']。しかし、var['foo']\()言って不平を言うでしょう

RuntimeError: Value is not callable (not TYPE_CODE_FUNC)

私の場合、値の型はgdb.TYPE_CODE_METHOD(確かではありませんが、var['foo'].type.code戻ります16)になると思います。

だから私は質問は次のとおりだと思います:

Python API はクラス メソッドの呼び出しをサポートしていますか?サポートしていない場合、回避策はありますか?

ありがとう!

4

3 に答える 3

9

OK、トムのアドバイスと別の回避策を使用して、やりたいことができたと思います。

追加の回避策が必要な問題は、(上記のコメントで述べたように) form: myval.method()to passの文字列を作成するための変数名がなかったことgdb.parse_and_evalです。

したがって、その回避策は、変数のアドレスを取得し、それを型にキャストしてから、メソッド呼び出しを文字列に追加することです。

タイプとアドレスの両方が gdb.Value の python api に存在します。したがって、ソリューションは次のようになります。

    eval_string = "(*("+str(self.val.type)+"*)("+str(self.val.address)+")).method()"
    return gdb.parse_and_eval(eval_string);
于 2014-04-01T22:21:01.950 に答える
3

誰もまだ実装していない、欠けている機能です。それが bugzilla にあるかどうかを確認し、そうでない場合はバグを報告してください。

一般的な回避策は、「this」引数の値を文字列に置き換え、gdb.parse_and_eval を介して呼び出しを行うことです。これは通常は機能しますが、もちろん、明らかに 2 番目に優れています。

于 2014-04-01T01:44:15.487 に答える