Почему pstack намного быстрее, чем gdb, просто присоединяя, сохраняя стеки и выходя из него?
У меня есть скрипт, который запускает GDB с командным файлом, как это:
set logging file file_name
set logging on
thread apply all bt
q
y
Почему pstack намного быстрее, чем этот скрипт? Могу ли я как-нибудь добиться этой быстроты с помощью GDB?
РЕДАКТИРОВАТЬ: разница была версии GDB. Я использовал gdb-7.10, и на сброс следов стека ушло около 14 секунд. с gdb 7.0.1, которую использовал pstack, это заняло 2 сек. Большую часть времени занимал gdb-7.10 при загрузке символов из нашей библиотеки, и я не смог найти подходящую опцию для -readnever
в новой версии.
1 ответ
По крайней мере, в моей системе pstack
это сценарий оболочки, который запускает GDB, так что вы, вероятно, можете точно увидеть, что выполняется, просто посмотрев в pstack
исполняемый файл.
Я подозреваю, что интересная часть сценария вполне может быть:
set width 0
set height 0
set pagination no
На самом деле set pagination no
такой же как set height 0
так что вы можете забыть set pagination no
часть.
set height 0
а также set width 0
отключите любую попытку gdb для отображения вывода, перенесенного на ширину вашего терминала, и представленной страницы за раз.
Я ожидаю, что эта обертка, и страница за время вывода, вызывает много дополнительной обработки каждый раз, когда GDB печатает что-либо.
Там не так много всего в pstack
сценарий, который отличается от вашего сценария, поэтому я не вижу, что еще это может быть.