![gdb 中的已用时间](https://linux22.com/image/95152/gdb%20%E4%B8%AD%E7%9A%84%E5%B7%B2%E7%94%A8%E6%97%B6%E9%97%B4.png)
有没有办法测量运行程序所用的时间gdb
?
看看这个:
<------------bp---------------------------------->
假设我们正在调试一个文件,并在某个随机位置设置了一个断点。现在我们执行一些操作,然后我们使用命令行( )gdb
让程序继续执行。gdb
run
我的问题就在这里。我想测量从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
文件中,这样您就不必在每次执行新程序时手动重新定义它。