2016-08-05 4 views
0

かなりのプリンタを登録しようとしました。 gdbコマンドプロンプトに "info pretty-printer"と書くと表示されます。しかし、これはどのように役立ちます。きれいなプリンターを登録する前に私がやったことはすべてやらなければなりません。例えば、登録する前に、私がかなりのプリンタを供給して、 "command-name expr"でinvokeメソッドを呼び出した場合、登録後も同じことをします。登録は私のかわいいプリンターにもたらす価値は何ですか?GDBで有益なプリンタを登録する方法

答えて

0

貴重なプリンタに関連するルックアップ機能がある場合、gdb printコマンドは、かわいいプリンタから提供されたコマンドを明示的に起動する必要がなく、きれいなプリンタを呼び出すことができます。 This pageには、gdb.printingモジュールを使用して、2つのprettyプリンタをgdb.printing.RegexpCollectionPrettyPrinterで2つの正規表現に関連付ける例が含まれています。おそらく、gdb.pretty_printersの内容を追うことでネイティブの例を見つけることもできます。私のオブジェクトにはlibstdcxx.v6.printers.Printerオブジェクトとgdb.printing.RegexpCollectionPrettyPrinterオブジェクトが含まれています。前者は私のシステムでは/usr/share/gcc-4.8/python/libstdcxx/v6/printers.pyに定義されています。

0

私は私のプリティプリンタを調達して、「コマンド名exprの」と invokeメソッドを呼び出した場合は、登録する前に、私はまだ 登録後に同じことを行います。

この文章から、あなたはコマンドとかわいいプリンタを混乱させるように思えます。コマンド実装にはinvokeメソッドがあります。きれいなプリンタはありません。さらに、コマンドは(gdb) command-nameのようなgdbコマンドラインから呼び出されますが、値が印刷されているとき、つまりprint mumble(またはバックトレース中に引数の値が出力されたときのように)など、きれいなプリンタが呼び出されるだけです。

あなたのコマンドをきれいなプリンタとして登録するのは便利ではないので、ときどきPythonの例外が表示されるだけです。

+0

現在、リンクリスト構造を印刷するための新しいコマンドを作成するPythonスクリプトを作成しました。私が同じもののためのかわいいプリンターをしたい場合は、どうすればいいのですか?構造はまだ同じに見えますか、それとも私が以前にしたものとはまったく異なっていますか? – Sharath

+0

https://sourceware.org/gdb/current/onlinedocs/gdb/Writing-a-Pretty_002dPrinter.html#Writing-a-Pretty_002dPrinterを参照してください。構造は多少異なります。データ構造をデコードするロジックは似ていますが、gdbとのインタフェースは異なります。一般的に、gdbとうまく統合されているように、プリティプリンタはカスタムコマンドより優れています。 –

関連する問題