2

とにかく、gdb のコアファイルから PyObject* の python 値を発見する方法はありますか?

4

1 に答える 1

4

大変な作業ですが、特にすべてのシンボルがあれば、もちろん実行できます。Python の特定のバージョン (およびそれをビルドするために使用されるコンパイル オプション) のヘッダー ファイルを見てください。それらは、何よりもまず型へのポインターを含む構造体として PyObject を定義します。多くのマクロが使用されているため、まったく同じフラグを使用してソースからその Python のコンパイルを再度実行することをお勧めしますが、前処理後に停止する -E を追加して、ビットを作成した特定の C コードを参照できます。コアダンプに表示されています。

型オブジェクトには、とりわけ、その名前である文字列 (char の配列) があり、そこから、その型のオブジェクトに正確に何が含まれているかを推測することができます。 、つまり項目数) と実際のデータへのポインター。

私はこのような非常に高度な事後分析デバッグを数回行いました (関連する Python バージョンと準備されたすべての前処理済みソース &c に関する非常に正確な知識から始めます)。フリーランスで時間単位で請求する場合、そのようなタスクに入札する必要がある場合、少なくとも 20 時間と言うでしょう - 私の安くはない時給で!-)。

IOW、それが非常に高価なピクルスから抜け出す唯一の方法である場合にのみ、価値があります. プラス面としては、ソースのすべての行を覚えた後でも、Python の内部について、あなたが思っていたよりも多くのことを教えてくれます。頑張ってください、あなたはいくつか必要になります!!!

于 2009-07-03T21:18:06.873 に答える