Пожалуйста, не отвечайте, я должен использовать ddd, nemiver, emacs, vim или любой другой интерфейс, я просто предпочитаю gdb как есть, но хотел бы видеть его вывод с некоторыми цветами терминала.
Как только выделение текущей строки на l
будет реализовано sourceware.org/bugzilla/show_bug.cgi?id=21044, я просто добавлю l
к hook-stop
и перейду к Dev Nirvana.
Это не цвета, но рассмотрим текстовый интерфейс gdb. Это имеет огромное значение для того, насколько пригоден GDB.
Вы можете запустить его с помощью:
gdb -tui executable.out
Снимок экрана:
Как видите, основными особенностями являются:
Ух ты! Спасибо! Я долгое время искал красивую графическую оболочку вокруг gdb, и я пробовал xxgdb, kgdb и ddd, но ни один из них не работал у меня очень хорошо, поэтому я придерживался простого старого интерфейса командной строки. Но это абсолютно идеально!
Ctrl-x Ctrl-a: введите это для переключения в текстовый режим графического интерфейса и обратно, работает даже без параметра командной строки.
Печать на стандартный вывод из программы ломает интерфейс для меня. Есть ли обходные пути, кроме перенаправления?
У меня такая же проблема с stdout, нарушающей интерфейс. Ctrl-L или любая другая привязка перерисовки, по крайней мере, делает ее пригодной для использования. Для людей с включенным режимом редактирования vi Ctrl-X Ctrl-A не работает, но команда layout src переведет вас в режим TUI с источником, показанным как изображение.
@wilywampa И чтобы оставить tui с привязками vim, скоро будет добавлен tui disable
: stackoverflow.com/a/30763033/895245
Откройте второй терминал и введите команду: $ tty Используйте результат, чтобы направить стандартный вывод из сеанса gdb на этот терминал с помощью команды (gdb) set inferior-tty. бывший. из моего .gdbinit установите inferior-tty / dev / tty2, теперь ваш стандартный вывод не испортит $ gdb -tui.
@jturcotte: Или layout reg
, чтобы переключиться в этот режим с отображением регистров и разборки.
Они также называются layouts
в gdb, чтобы увидеть, как другие варианты компоновки используют help layout
, доступные варианты: layout src
(этот ответ), layout asm
, layout split
, layout regs
.
Я знаю, что вам не нужен интерфейс. Но как насчет cgdb он очень близок к gdb, это текстовый режим, но наверху есть исходное окно с подсветкой синтаксиса в коде.
sudo apt-get install cgdb
Просто попробовал запустить его: он не видит никакой истории gdb, и у него также есть испорченное приглашение, где есть пробел между кареткой и фактическим местом, где набирается символ (скорее всего из-за того, что у меня цветное приглашение в GDB). Совершенно не впечатлен.
@ Hi-Angel Я полагаю, cgdb не использует GNU Readline или какую-либо другую библиотеку для редактирования строк. Если это так, то у него не будет приличной подсказки. Еще одна мощная функция, предоставляемая строковым редактором, - это переход к предыдущему слову (Alt
f
по умолчанию для Readline). Кстати, на моем терминале он не отображает цвет, а какой-то мусор вроде [?2004h
.
Согласно GDB Wiki, cgdb использует механизм устарел для взаимодействия с GDB.
О, про мусор вывода терминала это известная проблема не исправлена. К сожалению, сопровождающий не ответил на этот вопрос.
вы можете получить любые цвета, какие захотите;
# 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
Можно значительно улучшить внешний вид GDB за счет использования цветов. Это делается любым из следующих способов:
Раскрашенная подсказка через «установить подсказку». Например, сделайте приглашение жирным и красным:
set prompt \033[1;31m(gdb) \033[m
или сделайте запрос новой формы, жирным и красным:
set prompt \033[01;31m\n\n#####################################> \033[0m
Раскрашенные команды через хуки
Все примеры доступны в следующих сообщениях блога Майкла Келлехера:
"Beautify GDB", 12 мая 2010 г. (через archive.org)
«Экспериментальная подсветка синтаксиса GDB», 15 мая 2010 г. (через archive.org)
@Mike: было бы полезно разместить здесь содержание этих ссылок, поскольку сайт больше не доступен и robots.txt не позволяет archive.org его проиндексировать.
Вы можете получить соответствующую информацию здесь: sourceware.org/gdb/current/onlinedocs/gdb/Prompt.html
Теперь ссылки указывают на кэш сообщений в блоге archive.org.
@Mike, похоже, что вы являетесь автором сообщений в блоге; если да, сообщите об этом в ответе.
Для минималистичного ответа лучше использовать set prompt \1\033[1;31m\2(gdb) \1\033[m\2
, иначе редактирование строки в приглашении будет прервано.
#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, взлом «пользовательского режима».
Нашел основную часть здесь и немного доработал. Требуется подсветка, фильтрация C++. Если цвета перепутались, выполните команду re command.
cgdb
намного лучше, чем gdb -tui
Согласовано. Простые строки, напечатанные моей программой, испортили консоль gdb -tui. Этого не происходит в cgdb. Спасибо за совет!
Вы можете настроить ~/.gdbinit
для отображения цветов. Вы можете использовать .gdbinit
от mammon, который доступен здесь:
https://github.com/gdbinit/gdbinit
Вы также можете настроить его столько, сколько захотите. Нашел это благодаря этот ТАК ответ. Вот какой результат вы можете получить:
Также доступен репозиторий GitHub: https://github.com/gdbinit/Gdbinit
Кстати, та же идея была и с применяется к lldb.
Следуя той же концепции, Панель управления GDB предоставляет модульный визуальный интерфейс для GDB на Python.
Другой подобный проект использует поддержку Python в GDB для обеспечения большей расширяемости, так что это стоит проверить: https://github.com/dholm/voidwalker
@dholm также предоставляет свой собственный .gdbinit, вдохновленный предыдущим.
Некоторые проекты предоставляют набор полезных функций, включая улучшенное отображение. Это случай ПЕДА или pwndbg. Последний дает следующее описание:
A PEDA replacement. In the spirit of our good friend
windbg
,pwndbg
is pronouncedpwnd-bag
.
- Speed
- Resiliency
- Clean code
Он предоставляет команды для поддержки отладки и разработки эксплойтов, аналогичные командам PEDA, и лучшего отображения (хотя это не является основным направлением проекта). Программное обеспечение все еще находится в стадии разработки и еще не выпущено должным образом.
Описание проект гласит:
Voltron is an extensible debugger UI for hackers. It allows you to attach utility views running in other terminals to your debugger (LLDB or GDB), displaying helpful information such as disassembly, stack contents, register values, etc, while still giving you the same debugger CLI you're used to.
Вы можете модифицировать .gdbinit
для автоматической интеграции. Однако само отображение находится за пределами GDB (например, в разделении tmux).
ГЭФ - еще один вариант, описанный как:
It is aimed to be used mostly by exploiters and reverse-engineers, to provide additional features to GDB using the Python API to assist during the process of dynamic analysis and exploit development.
Большое спасибо за ответ, у вас есть идеи, как отключить вывод регистров? (я использую gdb для кода C++ и сразу не нуждаюсь в уровне ассемблера)
@vak а set $SHOWCPUREGISTERS = 0
пробовали? Обычно у вас есть несколько параметров, которые вы можете установить, и вы всегда можете изменить код в соответствии со своими потребностями.
Я хотел выделить следующее: выделить строки трассировки стека, которые принадлежат моим исходным файлам (а не библиотекам).
Решением было использовать 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)
Рабочий пример, использующий ловушку - пусть даже минимальный -, вероятно, был бы более желанным.
Отлично, я только что нашел этот хак, используя colout: https://github.com/nojhan/colout/blob/master/colout/example.gdbinit
Он говорит мне bash: colout: command not found
, когда я запускаю bt f
Еще одна удачная комбинация цветов - эта конфигурация. Это значительно упрощает проверку трассировки. Чтобы использовать его, просто сохраните этот файл как ~/.gdbinit
и запустите gdb в обычном режиме.
Спасибо, это именно то, что я искал. Я изучал многопоточное приложение с длинным стеком вызовов, и это идеально подходит для таких трассировок.
Новое в предстоящем GDB 8.3!
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob;f=gdb/NEWS
Terminal styling is now available for the CLI and the TUI. GNU Source Highlight can additionally be used to provide styling of source code snippets. See the "set style" commands, below, for more information.
Лучший ответ КОГДА-ЛИБО! Здесь вы можете найти руководство по установке gdb 8.3
medium.com/@simonconnah/…, обратите внимание, что вашему компьютеру требуется как минимум 512 МБ ОЗУ, в противном случае компилятор gcc
начнет мусор.
Он не даст вам цвета (поэтому я не буду называть это ответом), но некоторая конфигурация ~ / .gdbinit улучшит работу. Я использую это как минимум: установить сохранение истории при наборе печати pretty set output-radix 16 set height 0