プログラムの実行にかかる時間を測定する方法はありますかgdb
?
確認してください:
<------------bp---------------------------------->
ファイルをデバッグし、任意の場所にブレークポイントを設定するとします。ここでいくつかのタスクを実行し、コマンドライン()を使用してgdb
プログラムを続行します。gdb
run
私の問題は次のとおりです。測定したいです。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 checkTime
gdbはコマンドのリストを求めるメッセージを表示します。上記のコマンド(python / shell)のいずれかを入力すると、そのコマンドを使用してスクリプトを呼び出すことができますcheckTime
。そうすれば時間が正確になるでしょう。また、新しいプログラムを実行するたびに手動で再定義する必要がないように、define checkTime
このファイルにコマンドのリストを配置することもできます。./gdbinit