問題タブ [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 に答える
580 参照

python - GDB pretty-printer: 親構造体でサイズがわかっている場合に配列を出力する

私はC++で次のような構造体を持っています:

これらはフレームワークの一部であり、他にもいくつかのメンバー、ヘルパーなどがありますが、これらは重要な部分です。これを Python GDB pretty-printer で次のように表示したいと思います。

これまでのところ、HeapBlock を別の子として表示することに失敗しました。イテレータを悪用して生成することに成功しました:

これは、のメソッドdb["size"]によって返された反復子からの最初の結果で を返し、次に次の結果のために を返すことによって行われました。DataBlockPrinterchildren()db["hb"]["data"]size

に別のプリンターを使用しようとしましたHeapBlocksが、問題は、HeapBlockそれがどれくらい大きいかがわからないことです。それは親(DataBlock)に格納されているため、HeapBlockプリンターは反復を停止するタイミングも知りません。

ここの一部として印刷されている場合、sizeフィールドをきれいなプリンターに渡すことは可能ですか?HeapBlockDataBlock

0 投票する
1 に答える
896 参照

python - GDB Python はオーバーロードされたメソッドを解決します

Python インターフェイスを使用して GDB でオーバーロードされたメソッドを検索するにはどうすればよいですか?

「el」と呼ばれるいくつかのメソッドを持つクラスがあり、そのうちの 1 つは 2 つintの s を取ります。GDB はブレークポイントで停止し_Dr、下位プロセスのスコープ内でメンバー変数が呼び出されます。を表す Pythongdb.Valueオブジェクトを取得するためにこれを行い_Drます。

今、私はメソッドを取得したいel(int,int):

オーバーロードを解決するために引数の型をどのように伝えるのですか?

私はこれを試しました:

この:

この:

これを行う正しい方法は何ですか?

0 投票する
1 に答える
162 参照

python - perl のような Data::Dumper gdb の代替

Data::Dumper のようなものは gdb に存在しますか? 複雑な C 構造体をきれいに印刷するにはどうすればよいですか。たとえば、要素が構造体である配列の配列がある場合はどうすればよいですか? Python で gdb をスクリプト化することについて読んだことがありますが、これができるかどうかわかりませんか?

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

python - Cプログラムのデバッグ中にgdb値をpython数値オブジェクトに変換する方法

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 に変換するにはどうすればよいでしょうか?

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

python - コマンドラインから起動したpython gdbスクリプトに引数を渡す方法

コマンドを介して実行される python スクリプトにいくつかのコマンド ライン引数を渡したいのgdbですが、python で gdb モジュールをインポートすると、sys から argv 属性が削除されます。私の例に示されている Python スクリプト内で arg1 と arg2 にアクセスするにはどうすればよいですか?

コマンドライン実行:

a.py:

発生したエラー:

バージョン:

  • GNU gdb (GDB) 7.2
  • パイソン 2.6.6

編集:

デバッグする最終ターゲットは、既に実行されている C 実行可能ファイルであるため、スクリプトの後半でそれにアタッチしますが、その部分が gdb エラーを出力するgdb -x a.py --args python -arg1 -arg2ため、どちらも正しくありません: ...pythonReading symbols from /usr/bin/python...(no debugging symbols found)...done.

0 投票する
1 に答える
1001 参照

multithreading - マルチスレッド Python 拡張機能を使用してマルチスレッド プログラムをデバッグすると、GDB がハングする

ユーザーが任意のタイプの変数を検査できる新しいスレッドを起動するコマンドを定義する GDB python 拡張機能を開発しようとしています。私のpython拡張のスケルトンはこれです:

ご覧のとおり、ここでプロットコマンドを定義します。次のプログラムをデバッグしようとすると、次の場合に GDB がハングします。

  1. procedure() スレッド内の任意の場所にブレークポイントを配置します (たとえば、while ループ内の 9 行目)。
  2. gdb がブレークポイントに到達したら、コマンドplotを実行します。
  3. その後、実行を続けます。

最も奇妙なことは、このコードをスレッドを起動せずにprocedure()を呼び出すように変更すると、GDB が決してハングしないことです (そして、プレースホルダー メッセージは期待どおりに出力されます)。

これまでのところ、GDB バージョン 7.5.1 および 7.10 でこの手順を実行しようとしましたが、常に同じ動作が発生します。

私は何を間違っていますか?デーモン スレッドは GDB でサポートされていませんか? それは、ドキュメントのセクション 23.2.2.1が示唆していることと一致していないようです。

0 投票する
1 に答える
76 参照

gdb - gdb Python API:例外が消えますか?

特定の場所で、gdb 内の Python コードが例外を適切に処理しない理由を知っている人はいますか? または、明確にするために、おそらく例外メッセージは *gud バッファー以外の場所に送信されます。期待どおり、gdb がプロンプトに制御を戻していません。

(私はEmacs(24.5.1)gudモードでGNU gdb(GDB)7.11.50.20160212-gitを使用しています)

例えば:

「SomeEvent」が処理されると、「__call__」が悪いコードまで実行され、戻り、通常の操作が続行されます(私が観察できるように)。

サブクラス化された gdb.Breakpoint の Stop() など、他の「コールバック」タイプのメソッドでこの動作に気付きました。

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

python-2.7 - gdb-pythonでpythonスクリプトを終了するには?

GDB(v7.5.1-0.7.29)でpython(v2.7)スクリプトを書いています。特定の条件が false になったときに Python スクリプトを終了したい。しかし、GDB を終了したくありません。sys.exit()、exit()、および quit() を使用してみましたが、それらの場合、GDB も終了します。gdbではなく、Pythonスクリプトを終了する方法はありますか. ctrl + c コマンドと同様ですが、特定の条件が false になった場合にのみこれが発生するようにします。