Как выделить и раскрасить вывод gdb во время интерактивной отладки?
172
Пожалуйста, не отвечайте, я должен использовать ddd, nemiver, emacs, vim или любой другой интерфейс, я просто предпочитаю gdb как есть, но хотел бы видеть его вывод с некоторыми цветами терминала.
Это не даст вам цвета (поэтому я не буду называть это Ответом), но некоторая конфигурация ~ / .gdbinit улучшит восприятие. Я использую это как минимум: установить сохранение истории на заданной печати довольно установить output-radix 16 установить высоту 0
activout.se
Было бы неплохо изменить принятый ответ, чтобы мой старый неправильный ответ можно было удалить. Спасибо.
Следуя той же концепции, GDB Dashboard предоставляет модульный визуальный интерфейс для GDB в Python.
(Недействительный) ходунок
Другой аналогичный проект использует поддержку Python в GDB для обеспечения большей расширяемости, поэтому стоит проверить это: https://github.com/dholm/voidwalker
@dholm также предоставляет свой собственный .gdbinit, вдохновленный предыдущим.
pwndbg
Некоторые проекты предоставляют набор полезных функций, в том числе улучшенное отображение. Это касается PEDA или pwndbg . Последний дает следующее описание:
Замена PEDA. В духе нашего хорошего друга windbg, pwndbgпроизносится pwnd-bag.
скорость
упругость
Чистый код
Он предоставляет команды для поддержки отладки и разработки, аналогичные разработанным в PEDA, и улучшает отображение (хотя это не является основной целью проекта). Программное обеспечение все еще находится в стадии разработки и еще не выпущено должным образом.
Voltron - это расширяемый интерфейс отладчика для хакеров. Он позволяет вам присоединять служебные представления, запущенные в других терминалах, к вашему отладчику (LLDB или GDB), отображая полезную информацию, такую как разборка, содержимое стека, значения регистров и т. Д., И в то же время предоставляет тот же CLI отладчика, к которому вы привыкли.
Вы можете изменить свой, .gdbinitчтобы автоматически интегрировать его. Тем не менее, сам дисплей находится за пределами GDB (например, в tmux split).
ГЭФ
GEF является еще одним вариантом, и он описывается как:
Он предназначен для использования, главным образом, эксплуататорами и реверс-инженерами, чтобы предоставить GDB дополнительные функции с использованием Python API, чтобы помочь в процессе динамического анализа и разработки эксплойтов.
Вот Это Да! Спасибо! Я долго искал красивую графическую оболочку вокруг 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, но имеет окно исходного кода выше с подсветкой синтаксиса в коде.
Просто попытался запустить его: он не видит никакой истории GDB, и у него также есть испорченное приглашение, где есть некоторый пробел между кареткой и фактическим местом, где вводится символ (это, вероятно, потому что у меня есть цветное приглашение в GDB ) . Не впечатлил вообще.
Привет, Ангел,
@ Hi-Angel Я думаю, cgdb не использует GNU Readline или любую другую библиотеку для редактирования строк. Если это так, то у него не будет приличного приглашения. Другой мощный функционал, предоставляемый редактором строк, - это переход к предыдущему слову ( Altfпо умолчанию для Readline). Кстати, он не правильно отображает цвет на моем терминале, но [?2004hвместо этого, как мусор .
Франклин Ю
Согласно GDB Wiki , cgdb использует устаревший механизм взаимодействия с GDB.
Франклин Ю
19
Можно значительно улучшить внешний вид GDB за счет использования цветов. Это делается с помощью любого из следующих методов:
Раскрашенное приглашение через «Установить приглашение». Например, сделайте подсказку жирным и красным:
set prompt \033[1;31m(gdb) \033[m
или сделайте подсказку новой формы, жирным и красным:
set prompt \033[01;31m\n\n#####################################> \033[0m
Раскрашенные команды через крючки
Цветная подсветка синтаксиса команды «list».
Все примеры доступны в следующих сообщениях в блоге, написанных Майклом Келлехером:
@Mike: было бы полезно опубликовать здесь содержимое этих ссылок, так как сайт больше не доступен и robots.txt не позволяет archive.org проиндексировать его.
Терминальное моделирование теперь доступно для CLI и TUI. Кроме того, GNU Source Highlight может использоваться для оформления фрагментов исходного кода. См. Команды «set style» ниже для получения дополнительной информации.
Лучший ответ когда-либо! Вы можете найти здесь руководство по установке gdb 8.3medium.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.
Это говорит мне, bash: colout: command not foundкогда я бегуbt f
пользователь
4
Я хотел выделить следующее: выделить линии трассировки стека, которые принадлежат моим исходным файлам (а не библиотекам).
Решение состояло в том, чтобы использовать gdb-python (на MSYS; на Linux обычно gdbпоставляется с уже встроенным Python?), Ловить backtrace, использовать
Затем обработайте 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 нормально
l
получает реализовано sourceware.org/bugzilla/show_bug.cgi?id=21044 , я просто добавитьl
кhook-stop
и введите Dev нирвану.Ответы:
.gdbinit
Вы можете настроить свой,
~/.gdbinit
чтобы иметь цвета. Вы можете использовать мамон,.gdbinit
который доступен здесь:https://github.com/gdbinit/gdbinit
Вы можете настроить это столько, сколько хотите. Я нашел это благодаря такому ответу . Вот вид вывода, который вы можете получить:
Также доступен репозиторий GitHub: https://github.com/gdbinit/Gdbinit.
Кстати , та же идея была применена и к lldb .
GDB Dashboard
Следуя той же концепции, GDB Dashboard предоставляет модульный визуальный интерфейс для GDB в Python.
(Недействительный) ходунок
Другой аналогичный проект использует поддержку Python в GDB для обеспечения большей расширяемости, поэтому стоит проверить это: https://github.com/dholm/voidwalker
@dholm также предоставляет свой собственный .gdbinit, вдохновленный предыдущим.
pwndbg
Некоторые проекты предоставляют набор полезных функций, в том числе улучшенное отображение. Это касается PEDA или pwndbg . Последний дает следующее описание:
Он предоставляет команды для поддержки отладки и разработки, аналогичные разработанным в PEDA, и улучшает отображение (хотя это не является основной целью проекта). Программное обеспечение все еще находится в стадии разработки и еще не выпущено должным образом.
Voltron
Описание проекта гласит:
Вы можете изменить свой,
.gdbinit
чтобы автоматически интегрировать его. Тем не менее, сам дисплей находится за пределами GDB (например, в tmux split).ГЭФ
GEF является еще одним вариантом, и он описывается как:
источник
set $SHOWCPUREGISTERS = 0
? По сути, у вас есть несколько параметров, которые вы можете установить , и вы всегда можете изменить код в соответствии со своими потребностями.Это не цвета, но рассмотрим текстовый интерфейс GDB . Это имеет огромное значение для использования GDB.
Вы можете запустить его с помощью:
Скриншот:
Как видите, основными функциями являются:
источник
Я знаю, что вы не хотели интерфейс. Но как насчет cgdb, он очень близок к gdb, это textmode, но имеет окно исходного кода выше с подсветкой синтаксиса в коде.
источник
Alt
f
по умолчанию для Readline). Кстати, он не правильно отображает цвет на моем терминале, но[?2004h
вместо этого, как мусор .Можно значительно улучшить внешний вид GDB за счет использования цветов. Это делается с помощью любого из следующих методов:
Раскрашенное приглашение через «Установить приглашение». Например, сделайте подсказку жирным и красным:
set prompt \033[1;31m(gdb) \033[m
или сделайте подсказку новой формы, жирным и красным:
set prompt \033[01;31m\n\n#####################################> \033[0m
Раскрашенные команды через крючки
Все примеры доступны в следующих сообщениях в блоге, написанных Майклом Келлехером:
«Украсить ГБД», 12 мая 2010 г. (через archive.org)
«Экспериментальная подсветка синтаксиса GDB», 15 мая 2010 г. (через archive.org)
источник
Новое в предстоящем GDB 8.3!
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob;f=gdb/NEWS
источник
gdb 8.3
medium.com/@simonconnah/… , обратите внимание, что вашей машине требуется не менее 512 МБ ОЗУ, в противном случаеgcc
компилятор начнет загружаться.Предупреждение: глючит. Нет поддержки TUI, взломать пользовательский режим.
Найдена основная часть здесь и модифицирован его немного. Нужно выделить, с ++ фильтр. Если цвета испортились, выполните команду re.
источник
cgdb
намного лучше чемgdb -tui
источник
Аккуратно, я только что нашел этот хак с помощью colout: https://github.com/nojhan/colout/blob/master/colout/example.gdbinit
источник
bash: colout: command not found
когда я бегуbt f
Я хотел выделить следующее: выделить линии трассировки стека, которые принадлежат моим исходным файлам (а не библиотекам).
Решение состояло в том, чтобы использовать gdb-python (на MSYS; на Linux обычно
gdb
поставляется с уже встроенным Python?), Ловитьbacktrace
, использоватьЗатем обработайте
stack_trace
регулярные выражения Python и распечатайте их. Жирный и другие цвета достигаются с помощью такой функции:источник
Другая хорошая комбинация цветов дается этой конфигурацией . Это делает проверку следов намного проще. Чтобы использовать его, просто сохраните этот файл как
~/.gdbinit
и запустите GDB нормальноисточник
Вы можете получить любые цвета, которые вы хотите;
источник