Я отлаживаю библиотеку C ++ для Android с помощью GDB (gdbserver + gdb на хосте), и я заметил, что вывод gdb очень очень медленный.
Например. приложение имеет около 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
Процесс занимает много процессорного времени.
Мой вопрос: как мне сделать вывод GDB в файл быстрее?
Пожалуйста, помогите, если кто-нибудь знает, как добиться одного из следующих действий:
РЕДАКТИРОВАТЬ:
Стоит отметить, что я использую adb forward
установить TCP-соединение между GDB и GDB-сервером:
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
Задача ещё не решена.
Других решений пока нет …