Gdb печатать в файл вместо stdout

Я запускаю gdb и хочу рассмотреть один из тех неудачных объектов-богов. Мне нужно, чтобы gdb печатал объект в файл вместо экрана, чтобы я мог его открыть в vi и передвигаться с легкостью. Со всей универсальностью gdb, должен быть способ сделать это, правильно?

Ответ 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