5

コアファイルからマクロを使用してスタックの開始と終了を見つけようとしています。同じことを達成するために、私は最後と最初のフレームからesp値を見つけようとしています。同じ違いがあると、使用中のスタックサイズがわかります。

スタック内のフレーム数を見つける方法はありますか?btは私にすべてのフレームを与えます。フレーム0からスタックの一番上を見つけることができますか?最後のフレーム番号を見つける方法はありますか?

スタックの開始と終了を見つける別の方法はありますか?ありがとう

4

1 に答える 1

8

最も外側のフレームのフレーム番号は、次を使用して見つけることができますbt -1

(gdb) bt -1
#9  0x0000000000464c45 in main (argc=<optimized out>, argv=<optimized out>)
    at ../../binutils-gdb/gdb/gdb.c:32

最も外側のフレームがであることがわかります#9

ただし、これをスクリプト化するのは少し面倒です。たとえば、を使用frame -1してそのフレームを選択することはできません。

この時点で、2つのオプションがあります。

1つのオプションは、gdb Python APIを使用してフレームを反復処理し、好きなことを実行することです。利用可能な場合、これが最も簡単なルートです。Python APIは文書化されており、使いやすいです。この場合、あなたは主にgdb.Frameコードに興味があるでしょう。

Pythonを使用できない場合はset logging、の出力をbt -1ファイルに書き込むために使用する従来の恐ろしいgdbハックを使用できます。次にshell、このファイルの内容を有効なgdbコマンド(などframe 9)に書き換えます。そして最後にsource、結果の変換されたファイル。

于 2015-06-16T18:27:34.190 に答える