Как выделить и раскрасить вывод gdb во время интерактивной отладки? - PullRequest
152 голосов
/ 16 октября 2008

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

Ответы [ 11 ]

167 голосов
/ 27 июня 2013

.gdbinit

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

https://github.com/gdbinit/gdbinit

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

.gdbinit

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

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

Панель управления GDB

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

GDB Dashboard

(аннулируются) ходунки

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

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

(void)walker

pwndbg

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

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

  • Скорость
  • Отказоустойчивость
  • Чистый код

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

pwndbg

Voltron

Проект Описание состояний:

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

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

voltron

GEF

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

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

GEF

90 голосов
/ 30 октября 2008

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

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

gdb -tui executable.out

Скриншот:

enter image description here

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

  • показывает, на какой линии мы находимся, а окружающие линии
  • показывает точки останова
43 голосов
/ 07 февраля 2009

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

image

16 голосов
/ 15 июля 2010

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

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

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

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

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

    enter image description here

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

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

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

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

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

6 голосов
/ 02 мая 2012
#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.

5 голосов
/ 10 апреля 2013

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

4 голосов
/ 20 октября 2014

Отлично, я только что нашел этот хак, используя colout: https://github.com/nojhan/colout/blob/master/colout/example.gdbinit

before - after

3 голосов
/ 18 января 2014

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

Решением было использование 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)
2 голосов
/ 09 апреля 2019

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

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

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

screenshot of gdb 8.2.91.20190401-23.fc30

2 голосов
/ 13 октября 2017

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

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