我正在使用GDB(主机上的gdbserver + gdb)调试Android的C ++库,并且我注意到gdb输出非常慢。
E.g。应用程序有大约15个线程,当我键入thread apply all bt
时,将所有堆栈跟踪输出到终端/文件需要15-20秒。所有输出大约是200行文本,它应该不会那么慢!
此外,在我的主机(64位Ubuntu)上,同样的事情不会超过0.1-0.2秒!
我怀疑主机上的终端输出可能是导致速度减慢的原因,但事实并非如此。即使使用以下设置,也需要相同的时间:
set width 0
set height 0
set pagination 0
set logging redirect on
set logging overwrite on
set logging file prof.txt
set logging on
我不完全确定减速的主要原因是什么,它是在Android上缓慢堆栈展开或通过gdb< - > gdbserver连接缓慢传输数据。但我怀疑后者,因为当gdb输出数据时,adb
进程会消耗大量的CPU时间。
我的问题是:如何让gdb输出文件更快?
如果有人知道如何实现以下目标之一,请提供帮助:
修改
值得一提的是我使用adb forward
在gdb和gdbserver之间建立tcp连接:
adb push $NDK_ROOT/prebuilt/android-arm/gdbserver/gdbserver /data/local/tmp
adb shell chmod 777 /data/local/tmp/gdbserver
adb shell /data/local/tmp/gdbserver :5039 --attach $1 &
adb forward tcp:5039 tcp:5039