gdb 中的已用時間

gdb 中的已用時間

有沒有辦法測量運行程式所花費的時間gdb

看看這個:

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

假設我們正在調試一個文件,並在某個隨機位置設置了一個斷點。現在我們執行一些操作,然後我們使用命令列( )gdb讓程式繼續執行。gdbrun

我的問題就在這裡。我想測量從BP直到程式成功結束或發生某些錯誤。

我的建議是使用.gdbinit文件,在該文件中我們調用一些 C 函數來在命令之後啟動計時器run,並在執行結束時我們也調用一個gettime()C fun。

所以,我的偽代碼有點像這樣(.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 命令,請使用下列命令:

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」將命令放入預設腳本中來解決這個問題。如果我們運行define checkTime,那麼 gdb 將提示我們輸入命令列表。只需輸入上面列出的任何命令(python/shell),然後您就可以使用命令呼叫腳本checkTime。那麼,時間就會準確。此外,您可以將define checkTime命令清單放入./gdbinit檔案中,這樣您就不必在每次執行新程式時手動重新定義它。

相關內容