Как выделить и раскрасить вывод gdb во время интерактивной отладки?


172

Пожалуйста, не отвечайте, я должен использовать ddd, nemiver, emacs, vim или любой другой интерфейс, я просто предпочитаю gdb как есть, но хотел бы видеть его вывод с некоторыми цветами терминала.


4
Это не даст вам цвета (поэтому я не буду называть это Ответом), но некоторая конфигурация ~ / .gdbinit улучшит восприятие. Я использую это как минимум: установить сохранение истории на заданной печати довольно установить output-radix 16 установить высоту 0
activout.se

Было бы неплохо изменить принятый ответ, чтобы мой старый неправильный ответ можно было удалить. Спасибо.
ddaa

После выделения текущей строки на lполучает реализовано sourceware.org/bugzilla/show_bug.cgi?id=21044 , я просто добавить lк hook-stopи введите Dev нирвану.
Сиро Сантилли 郝海东 冠状 病 六四 事件 法轮功

Ответы:


183

.gdbinit

Вы можете настроить свой, ~/.gdbinitчтобы иметь цвета. Вы можете использовать мамон, .gdbinitкоторый доступен здесь:

https://github.com/gdbinit/gdbinit

Вы можете настроить это столько, сколько хотите. Я нашел это благодаря такому ответу . Вот вид вывода, который вы можете получить:

.gdbinit

Также доступен репозиторий GitHub: https://github.com/gdbinit/Gdbinit.

Кстати , та же идея была применена и к lldb .

GDB Dashboard

Следуя той же концепции, GDB Dashboard предоставляет модульный визуальный интерфейс для GDB в Python.

GDB Dashboard

(Недействительный) ходунок

Другой аналогичный проект использует поддержку Python в GDB для обеспечения большей расширяемости, поэтому стоит проверить это: https://github.com/dholm/voidwalker

@dholm также предоставляет свой собственный .gdbinit, вдохновленный предыдущим.

(Недействительный) ходунок

pwndbg

Некоторые проекты предоставляют набор полезных функций, в том числе улучшенное отображение. Это касается PEDA или pwndbg . Последний дает следующее описание:

Замена PEDA. В духе нашего хорошего друга windbg, pwndbgпроизносится pwnd-bag.

  • скорость
  • упругость
  • Чистый код

Он предоставляет команды для поддержки отладки и разработки, аналогичные разработанным в PEDA, и улучшает отображение (хотя это не является основной целью проекта). Программное обеспечение все еще находится в стадии разработки и еще не выпущено должным образом.

pwndbg

Voltron

Описание проекта гласит:

Voltron - это расширяемый интерфейс отладчика для хакеров. Он позволяет вам присоединять служебные представления, запущенные в других терминалах, к вашему отладчику (LLDB или GDB), отображая полезную информацию, такую ​​как разборка, содержимое стека, значения регистров и т. Д., И в то же время предоставляет тот же CLI отладчика, к которому вы привыкли.

Вы можете изменить свой, .gdbinitчтобы автоматически интегрировать его. Тем не менее, сам дисплей находится за пределами GDB (например, в tmux split).

Voltron

ГЭФ

GEF является еще одним вариантом, и он описывается как:

Он предназначен для использования, главным образом, эксплуататорами и реверс-инженерами, чтобы предоставить GDB дополнительные функции с использованием Python API, чтобы помочь в процессе динамического анализа и разработки эксплойтов.

ГЭФ


Большое спасибо за ваш ответ, у вас есть идея, как отключить регистр? (я использую GDB для кода C ++ и не нуждаюсь сразу в уровне ассемблера)
vak

да. Блин "Комментарии должны быть длиной не менее 15 символов."
Вак

1
@vak ты пробовал set $SHOWCPUREGISTERS = 0? По сути, у вас есть несколько параметров, которые вы можете установить , и вы всегда можете изменить код в соответствии со своими потребностями.
BenC

100

Это не цвета, но рассмотрим текстовый интерфейс GDB . Это имеет огромное значение для использования GDB.

Вы можете запустить его с помощью:

gdb -tui executable.out

Скриншот:

введите описание изображения здесь

Как видите, основными функциями являются:

  • показывает какая линия источника мы находимся и окружающие линии
  • показывает точки останова

5
Вот Это Да! Спасибо! Я долго искал красивую графическую оболочку вокруг gdb, и я пробовал xxgdb, kgdb и ddd, но ни один из них не работал для меня очень хорошо, поэтому я придерживался простого старого интерфейса командной строки. Но это абсолютно идеально!
Томас Падрон-Маккарти

46
Ctrl-x Ctrl-a: введите это для переключения в текстовый графический интерфейс и обратно, работает даже без параметра командной строки.
Jturcotte

2
Печать на стандартный вывод из программы нарушает интерфейс для меня. Есть ли обходные пути, кроме перенаправления?
Чиро Сантилли 郝海东 冠状 病 六四 事件 法轮功

1
Я получаю ту же проблему с stdout, ломая интерфейс. Ctrl-L или какая-либо другая привязка перерисовки делает ее пригодной для использования по крайней мере. Для людей с включенным режимом редактирования vi, Ctrl-X Ctrl-A не работает, но команда 'layout src' переведет вас в режим TUI с источником, показанным как изображение.
wilywampa

1
Откройте второй терминал и затем введите команду: $ tty Используйте результат, чтобы направить стандартный вывод из сеанса GDB на этот терминал с помощью команды (gdb) set inferior-tty. ех. из моего набора .gdbinit inferior-tty / dev / tty2 теперь ваш стандартный вывод не испортит $ gdb -tui.
netskink

46

Я знаю, что вы не хотели интерфейс. Но как насчет cgdb, он очень близок к gdb, это textmode, но имеет окно исходного кода выше с подсветкой синтаксиса в коде.


2
sudo apt-get установить cgdb
cs01

2
Настоящая случайность :)
Невежественный

Просто попытался запустить его: он не видит никакой истории GDB, и у него также есть испорченное приглашение, где есть некоторый пробел между кареткой и фактическим местом, где вводится символ (это, вероятно, потому что у меня есть цветное приглашение в GDB ) . Не впечатлил вообще.
Привет, Ангел,

@ Hi-Angel Я думаю, cgdb не использует GNU Readline или любую другую библиотеку для редактирования строк. Если это так, то у него не будет приличного приглашения. Другой мощный функционал, предоставляемый редактором строк, - это переход к предыдущему слову ( Alt fпо умолчанию для Readline). Кстати, он не правильно отображает цвет на моем терминале, но [?2004hвместо этого, как мусор .
Франклин Ю

Согласно GDB Wiki , cgdb использует устаревший механизм взаимодействия с GDB.
Франклин Ю

19

Можно значительно улучшить внешний вид GDB за счет использования цветов. Это делается с помощью любого из следующих методов:

  1. Раскрашенное приглашение через «Установить приглашение». Например, сделайте подсказку жирным и красным:

    set prompt \033[1;31m(gdb) \033[m

    или сделайте подсказку новой формы, жирным и красным:

    set prompt \033[01;31m\n\n#####################################> \033[0m

    введите описание изображения здесь

  2. Раскрашенные команды через крючки

  3. Цветная подсветка синтаксиса команды «list».

Все примеры доступны в следующих сообщениях в блоге, написанных Майклом Келлехером:

«Украсить ГБД», 12 мая 2010 г. (через archive.org)

«Экспериментальная подсветка синтаксиса GDB», 15 мая 2010 г. (через archive.org)


14
Ссылки не работают.
Джон Картер

7
@Mike: было бы полезно опубликовать здесь содержимое этих ссылок, так как сайт больше не доступен и robots.txt не позволяет archive.org проиндексировать его.
Люциан Адриан Гриджинку,

1
Вы можете получить соответствующую информацию здесь: sourceware.org/gdb/current/onlinedocs/gdb/Prompt.html
musiphil

1
Ссылки теперь указывают на кэш archive.org записей блога.
Алекс Куинн

1
@ Майк, кажется, ты автор постов в блоге; если это так, вы должны раскрыть это в ответе.
Дэвид З

13

Новое в предстоящем GDB 8.3!

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob;f=gdb/NEWS

Терминальное моделирование теперь доступно для CLI и TUI. Кроме того, GNU Source Highlight может использоваться для оформления фрагментов исходного кода. См. Команды «set style» ниже для получения дополнительной информации.

Скриншот GDB 8.2.91.20190401-23.fc30


Лучший ответ когда-либо! Вы можете найти здесь руководство по установке gdb 8.3 medium.com/@simonconnah/… , обратите внимание, что вашей машине требуется не менее 512 МБ ОЗУ, в противном случае gccкомпилятор начнет загружаться.
пользователь

7
#into .gdbinit
shell mkfifo /tmp/colorPipe

define hook-disassemble
echo \n
shell cat /tmp/colorPipe | c++filt | highlight --syntax=asm -s darkness -Oxterm256 &
set logging redirect on
set logging on /tmp/colorPipe
end 

define hookpost-disassemble
hookpost-list
end 

define hook-list
echo \n
shell cat /tmp/colorPipe | c++filt | highlight --syntax=cpp -s darkness -Oxterm256 &
set logging redirect on
set logging on /tmp/colorPipe
end 

define hookpost-list
set logging off 
set logging redirect off 
shell sleep 0.1s
end 

define hook-quit
shell rm /tmp/colorPipe
end 

define re
hookpost-disassemble
echo \033[0m
end 
document re
Restore colorscheme
end 

Предупреждение: глючит. Нет поддержки TUI, взломать пользовательский режим.

Найдена основная часть здесь и модифицирован его немного. Нужно выделить, с ++ фильтр. Если цвета испортились, выполните команду re.


7

cgdb намного лучше чем gdb -tui


Согласовано. Простые строки, напечатанные моей программой, уничтожили консоль gdb -tui. Это не происходит в cgdb. Спасибо за чаевые!
Рэндалл Кук


4

Я хотел выделить следующее: выделить линии трассировки стека, которые принадлежат моим исходным файлам (а не библиотекам).

Решение состояло в том, чтобы использовать gdb-python (на MSYS; на Linux обычно gdbпоставляется с уже встроенным Python?), Ловить backtrace, использовать

python stack_trace = gdb.execute('backtrace', False, True')

Затем обработайте stack_traceрегулярные выражения Python и распечатайте их. Жирный и другие цвета достигаются с помощью такой функции:

def term_style(*v):
    """1 is bold, 30--37 are the 8 colours, but specifying bold may also
    change the colour. 40--47 are background colours."""
    return '\x1B['+';'.join(map(str, v))+'m'

#Use like this:
print term_style(1) + 'This will be bold' + term_style(0) #Reset.
print term_style(1,30) + 'This will be bold and coloured' + term_style(0)
print term_style(1,30,40) + 'Plus coloured background' + term_style(0)

Рабочий пример, который использует хук - даже если он минимальный - был бы более желательным.
Привет, Ангел,

4

Другая хорошая комбинация цветов дается этой конфигурацией . Это делает проверку следов намного проще. Чтобы использовать его, просто сохраните этот файл как ~/.gdbinitи запустите GDB нормально


Спасибо, это было именно то, что я искал. Я искал многопоточное приложение с длинным стеком вызовов, и это идеально подходит для этих обратных трасс.
Йохан Бьярехолт

-2

Вы можете получить любые цвета, которые вы хотите;

# gdb
(gdb) shell echo -en '\E[47;34m'"\033[1m"
...
anything is now blue foreground and white background
...
(gdb) shell tput sgr0
... back to normal
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.