gdbの経過時間

gdbの経過時間

プログラムの実行にかかる時間を測定する方法はありますかgdb

確認してください:

<------------bp---------------------------------->

ファイルをデバッグし、任意の場所にブレークポイントを設定するとします。ここでいくつかのタスクを実行し、コマンドライン()を使用してgdbプログラムを続行します。gdbrun

私の問題は次のとおりです。測定したいです。BPプログラムが正常に終了するか、エラーが発生するまで。

.gdbinit私の提案は、コマンドの後にタイマーを起動するためにいくつかのC関数を呼び出し、run実行の終わりにC funも呼び出すファイルを使用することですgettime()

したがって、私の擬似コードは次のようになります(.gdbinit文書)。

break *0x8048452 (random place)
//start time
run
//get time

答え1

最も簡単な方法(gdbがPythonをサポートしている場合):

break *0xaddress
run
# target process is now stopped at breakpoint
python import time
python starttime=time.time()
continue
python print (time.time()-starttime)

gdbがPythonをサポートしていないがシェルコマンドを実行できる場合は、次のコマンドを使用してください。

shell echo set \$starttime=$(date +%s.%N) > ~/gdbtmp
source ~/gdbtmp
continue
shell echo print $(date +%s.%N)-\$starttime > ~/gdbtmp
source ~/gdbtmp

または、ターゲットプロセス呼び出しを行うことができます一日の時間を取得または時計は時間を得るしかし、これははるかに退屈です。これらの関数はプロセスアドレス空間の変数に書き込んで時間を返します。次のことを呼び出してこれらの変数を割り当てる必要がありますmalloc。他のブレークポイントmallocまたは呼び出し中にプログラムを停止すると、機能しなくなる可能性がありますfree

ただし、この解決策の小さな問題は、続行と印刷結果の行を相互に直接実行する必要があることです。それ以外の場合、タイミングが不正確になります。 「定義」で事前設定されたスクリプトにコマンドを入力すると、この問題を解決できます。を実行すると、define checkTimegdbはコマンドのリストを求めるメッセージを表示します。上記のコマンド(python / shell)のいずれかを入力すると、そのコマンドを使用してスクリプトを呼び出すことができますcheckTime。そうすれば時間が正確になるでしょう。また、新しいプログラムを実行するたびに手動で再定義する必要がないように、define checkTimeこのファイルにコマンドのリストを配置することもできます。./gdbinit

関連情報