問題タブ [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.
python - GDB pretty-printer: 親構造体でサイズがわかっている場合に配列を出力する
私はC++で次のような構造体を持っています:
これらはフレームワークの一部であり、他にもいくつかのメンバー、ヘルパーなどがありますが、これらは重要な部分です。これを Python GDB pretty-printer で次のように表示したいと思います。
これまでのところ、HeapBlock を別の子として表示することに失敗しました。イテレータを悪用して生成することに成功しました:
これは、のメソッドdb["size"]
によって返された反復子からの最初の結果で を返し、次に次の結果のために を返すことによって行われました。DataBlockPrinter
children()
db["hb"]["data"]
size
に別のプリンターを使用しようとしましたHeapBlocks
が、問題は、HeapBlock
それがどれくらい大きいかがわからないことです。それは親(DataBlock
)に格納されているため、HeapBlock
プリンターは反復を停止するタイミングも知りません。
ここの一部として印刷されている場合、size
フィールドをきれいなプリンターに渡すことは可能ですか?HeapBlock
DataBlock
python - GDB Python はオーバーロードされたメソッドを解決します
Python インターフェイスを使用して GDB でオーバーロードされたメソッドを検索するにはどうすればよいですか?
「el」と呼ばれるいくつかのメソッドを持つクラスがあり、そのうちの 1 つは 2 つint
の s を取ります。GDB はブレークポイントで停止し_Dr
、下位プロセスのスコープ内でメンバー変数が呼び出されます。を表す Pythongdb.Value
オブジェクトを取得するためにこれを行い_Dr
ます。
今、私はメソッドを取得したいel(int,int)
:
オーバーロードを解決するために引数の型をどのように伝えるのですか?
私はこれを試しました:
この:
この:
これを行う正しい方法は何ですか?
python - perl のような Data::Dumper gdb の代替
Data::Dumper のようなものは gdb に存在しますか? 複雑な C 構造体をきれいに印刷するにはどうすればよいですか。たとえば、要素が構造体である配列の配列がある場合はどうすればよいですか? Python で gdb をスクリプト化することについて読んだことがありますが、これができるかどうかわかりませんか?
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 に変換するにはどうすればよいでしょうか?
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
ため、どちらも正しくありません: ...python
Reading symbols from /usr/bin/python...(no debugging symbols found)...done.
multithreading - マルチスレッド Python 拡張機能を使用してマルチスレッド プログラムをデバッグすると、GDB がハングする
ユーザーが任意のタイプの変数を検査できる新しいスレッドを起動するコマンドを定義する GDB python 拡張機能を開発しようとしています。私のpython拡張のスケルトンはこれです:
ご覧のとおり、ここでプロットコマンドを定義します。次のプログラムをデバッグしようとすると、次の場合に GDB がハングします。
- procedure() スレッド内の任意の場所にブレークポイントを配置します (たとえば、while ループ内の 9 行目)。
- gdb がブレークポイントに到達したら、コマンドplotを実行します。
- その後、実行を続けます。
最も奇妙なことは、このコードをスレッドを起動せずにprocedure()を呼び出すように変更すると、GDB が決してハングしないことです (そして、プレースホルダー メッセージは期待どおりに出力されます)。
これまでのところ、GDB バージョン 7.5.1 および 7.10 でこの手順を実行しようとしましたが、常に同じ動作が発生します。
私は何を間違っていますか?デーモン スレッドは GDB でサポートされていませんか? それは、ドキュメントのセクション 23.2.2.1が示唆していることと一致していないようです。
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() など、他の「コールバック」タイプのメソッドでこの動作に気付きました。
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 になった場合にのみこれが発生するようにします。