Gdb печатает в файл вместо стандартного вывода


104

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

Ответы:


152

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

(gdb) set logging on

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

(gdb) set logging file my_god_object.log

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

(gdb) show logging

15
И если вы хотите, чтобы вывод шел только в файл журнала, используйте set logging redirect on.
Ben C

5
Разве мы не должны установить set logging file my_god_object.logраньше set logging on?
Herpes Free Engineer

Этот плюс tail -fи awkсегодня действительно помог. Спасибо!
remcycles 05

13

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

(gdb) run > outfile

11
Это был бы вывод отлаживаемой программы, а не вывод от самого gdb. OP хотел записать собственный вывод gdb.
Пол


@thepaul, но на самом деле это очень полезно, поскольку я отлаживаю программу QT, которая просто уничтожает stdin gdb своим мусором QDebug
rostamn739

@ rostamn739 упс, совсем не помогло
rostamn739

12

Расширение ответа @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

В некоторых системах вам нужно ввестиgdb -c core.3599 ...
user7610

1
> gdb core.3599 -ex 'thread применить все bt full' -ex quit Добавить --batch для запуска без приглашения -eg sudo gdb --batch core.3599 -ex 'thread применить все bt full' -ex quit> output .log
Дэвид Скелли

9

Из 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

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


2
Скопируйте и вставьте sourceware.org/gdb/onlinedocs/gdb/Logging-Output.html без ссылки.
Herpes Free Engineer

5

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

gdb command |& tee gdb.log

1

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

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

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

РЕДАКТИРОВАТЬ:

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


1

Здесь у вас было несколько ответов. Они исправляют. Я просто хочу добавить команду, которая поможет вам собрать весь вывод сразу. Это действительно полезно, когда вы собираете огромную трассировку. Прежде чем выполнять любую настройку журналирования, сделайте следующее:

(gdb)set height 0

Я нашел его в этой статье: https://askaralikhan.blogspot.com/2016/05/gdb-all-threads-bt-to-file.html?showComment=1584614942454#c4584028195226351332

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.