問題タブ [gdb-python]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
90 参照

python - gdb のきれいな印刷システムを偽造できるように、疑似型を生成することは可能ですか?

私は、Python で gdb 用のきれいなプリンターを作成しており、ゆっくりと方法論のコツをつかんでいます。このシステムがどのように機能し、メソッドから予想される結果の例を示す実際のドキュメントを見つけようとするのは、歯を抜くようなものです。あちこちで小片を見つけましたが、すべてを網羅しているものはありません。私が把握した情報の一部は、試行錯誤の結果であり、ゆっくりと進んでいます。

これまでのところ、プリティ プリンターは文字列のみを返すことが許可されているようですto_string()が (確かに)、 はaまたはとのペアをchildren()返すことができます。印刷されている /c++ オブジェクト。私は実際には、きれいなプリンター オブジェクトを返して、それを呼び出せることを望んでいましたが、残念ながら、そうではありませんでした。文字列を返すこともできますが、VSCode などの IDE でペイロード要素を折りたたみ可能にしたいので、値オブジェクトを返す必要があります。これに相当するのは、Natvis の合成アイテムですstringstringvaluevalue

バッファーである C++ クラスがあります。生、バイトベクトルが含まれており、読み取り可能な方法で処理する必要があります。

収集した制約を与えると、疑似型を使用してポインターをプロキシ値オブジェクトにラップできれば、バイトを使用可能な単位に分解できる可能性があります。ここに私が話していることのハードコードされた例があります:

ビッグエンディアンのマシンにブレークポイントを設定するとreturn 0;、次のようなものが表示されます。

以下は、プリティ プリンターの python コードについて、これまでに得たものです。

(この API だけでなく python も勉強中なので、エラーがあれば教えてください。)

最後から2番目の行yield ???は、私が立ち往生しているものです。何か案は?これでダメなら別の方法を教えてください。