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文件中,这样您就不必在每次执行新程序时手动重新定义它。

相关内容