有没有办法测量在 下运行程序所用的时间gdb?
看看这个:
<------------bp---------------------------------->
Run Code Online (Sandbox Code Playgroud)
假设我们正在调试一个文件,并在某个随机位置设置了一个断点。现在gdb我们执行一些操作,然后我们使用gdb命令行 ( run)让程序继续执行。
我的问题在这里。我想测量从bp到程序成功结束或发生某些错误所用的时间。
我的建议是使用.gdbinit文件,在该文件中,我们调用一些 C 函数来在run命令之后启动计时器,并且在执行结束时我们还调用了gettime()C fun。
所以,我的伪代码有点像这样(.gdbinit文件):
break *0x8048452 (random place)
//start time
run
//get time
Run Code Online (Sandbox Code Playgroud)
最简单的方法(如果你的 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)
Run Code Online (Sandbox Code Playgroud)
如果你的 gdb 没有 python 支持但可以运行 shell 命令,那么使用这个:
shell echo set \$starttime=$(date +%s.%N) > ~/gdbtmp
source ~/gdbtmp
continue
shell echo print $(date +%s.%N)-\$starttime > ~/gdbtmp
source ~/gdbtmp
Run Code Online (Sandbox Code Playgroud)
或者,您可以让目标进程调用gettimeofday或clock_gettime,但这会更加乏味。这些功能通过写进程的地址空间的变量,你很可能需要通过调用类似分配返回的时间malloc,并且可能无法正常工作,如果你的断点在另一个呼叫中间停止该程序malloc或free。
| 归档时间: |
|
| 查看次数: |
3514 次 |
| 最近记录: |