Я запускаю gdb и хочу рассмотреть один из тех неудачных объектов-богов. Мне нужно, чтобы gdb печатал объект в файл вместо экрана, чтобы я мог его открыть в vi и передвигаться с легкостью. Со всей универсальностью gdb, должен быть способ сделать это, правильно?
Gdb печатать в файл вместо stdout
Ответ 1
Вам нужно включить ведение журнала.
(gdb) set logging on
Вы можете указать, какой файл использовать.
(gdb) set logging file my_god_object.log
И вы можете проверить текущую конфигурацию ведения журнала.
(gdb) show logging
Ответ 2
Я обнаружил, что вы можете перенаправить вывод из gdb в файл с помощью команды run
:
(gdb) run > outfile
Ответ 3
Расширение ответа @quobupup
gdb core.3599 -ex bt -ex quit |& tee backtrace.log
переключатель -ex
запускает команду gdb. Таким образом, вышеупомянутый загружает основной файл, запускает команду bt
, затем команду quit
. Выход записывается в backtrace.log
, а также на экране.
Еще один полезный вызов gdb (дающий stacktrace с локальными переменными из всех потоков)
gdb core.3599 -ex 'thread apply all bt full' -ex quit
Ответ 4
Вы можете сохранить вывод команд gdb в файл. Существует несколько команд для управления журналом gdb.
set logging on
Включить ведение журнала.
set logging off
Отключить ведение журнала.
set logging file file
Измените имя текущего файла журнала. Файл журнала по умолчанию - gdb.txt.
set logging overwrite [on|off]
По умолчанию gdb будет добавляться в файл журнала. Установите перезапись, если вы хотите включить запись в журнал, чтобы вместо этого перезаписать файл журнала.
set logging redirect [on|off]
По умолчанию вывод gdb будет поступать как на терминал, так и на файл журнала. Установите перенаправление, если вы хотите, чтобы вывод шел только в файл журнала.
show logging
Показывать текущие значения параметров ведения журнала.
Ответ 5
Простой метод для записи gdb в файл, все еще видящий вывод (что упрощает команды записи), заключается в использовании tee
:
gdb command |& tee gdb.log