GDB распечатать в файл вместо стандартного вывода - PullRequest
89 голосов
/ 09 мая 2011

Я использую GDB и хочу изучить один из этих несчастных объектов бога.Требуется много страниц (и у меня 24-дюймовый монитор повернут вбок!), Чтобы увидеть все это. Для удобства использования я бы хотел, чтобы gdb печатал объект в файл вместо экрана, чтобы я мог открыть его вvi и с легкостью перемещайтесь. При всей универсальности GDB, должен быть способ сделать это, верно?

Ответы [ 6 ]

136 голосов
/ 09 мая 2011

Вам необходимо включить ведение журнала.

(gdb) set logging on

Вы можете указать, какой файл использовать.

(gdb) set logging file my_god_object.log

И вы можете проверить текущую конфигурацию ведения журнала.

(gdb) show logging
12 голосов
/ 31 октября 2013

Я обнаружил, что вы можете перенаправить вывод из GDB в файл с помощью команды run:

(gdb) run > outfile
9 голосов
/ 24 апреля 2016

Распространение ответа @ qubodup

gdb core.3599 -ex bt -ex quit |& tee backtrace.log

переключатель -ex запускает команду GDB. Таким образом, вышеизложенное загружает файл ядра, запускает команду bt, затем команду quit. Вывод записывается в backtrace.log, а также на экран.

Еще один полезный вызов GDB (предоставление трассировки стека с локальными переменными из всех потоков) -

gdb core.3599 -ex 'thread apply all bt full' -ex quit
5 голосов
/ 23 сентября 2016

С https://sourceware.org/gdb/onlinedocs/gdb/Logging-Output.html:

Возможно, вы захотите сохранить вывод команд 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

Показать текущие значения настроек ведения журнала.

3 голосов
/ 11 декабря 2015

Простой способ записать GDB в файл, в то же время просматривая вывод (что облегчает написание команд), заключается в использовании tee:

gdb command |& tee gdb.log
1 голос
/ 13 февраля 2019

Хотя здесь есть много хороших ответов, мне все еще нужно опубликовать единственное, что сработало для меня:

[niko@my-laptop]# gdb MyBinary 2>&1 log.txt

Это был единственный способ получить двоичный вывод gdb и в один и тот же файл log.txt, а также увидеть его на консоли.

EDIT:

Внимание: Кажется, что вывод частично не синхронизирован между выводом gdb и двоичным выходом. Может кто-нибудь подтвердить? Возможно, вы захотите проверить, есть ли в вашем клиенте telnet / ssh функция для записи результатов, которые вы видите в своей консоли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...