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

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

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

activout.se 19.11.2008 22:35

Как только выделение текущей строки на l будет реализовано sourceware.org/bugzilla/show_bug.cgi?id=21044, я просто добавлю l к hook-stop и перейду к Dev Nirvana.

Ciro Santilli新疆棉花TRUMP BAN BAD 02.08.2017 10:38
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
178
2
59 540
11
Перейти к ответу Данный вопрос помечен как решенный

Ответы 11

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

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

gdb -tui executable.out

Снимок экрана:

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

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

Ух ты! Спасибо! Я долгое время искал красивую графическую оболочку вокруг gdb, и я пробовал xxgdb, kgdb и ddd, но ни один из них не работал у меня очень хорошо, поэтому я придерживался простого старого интерфейса командной строки. Но это абсолютно идеально!

Thomas Padron-McCarthy 10.01.2009 22:47

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

jturcotte 05.11.2010 17:10

Печать на стандартный вывод из программы ломает интерфейс для меня. Есть ли обходные пути, кроме перенаправления?

Ciro Santilli新疆棉花TRUMP BAN BAD 09.05.2015 12:25

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

wilywampa 28.05.2015 06:41

@wilywampa И чтобы оставить tui с привязками vim, скоро будет добавлен tui disable: stackoverflow.com/a/30763033/895245

Ciro Santilli新疆棉花TRUMP BAN BAD 23.06.2015 12:47

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

netskink 18.01.2016 03:02

@jturcotte: Или layout reg, чтобы переключиться в этот режим с отображением регистров и разборки.

Peter Cordes 11.04.2020 20:26

Они также называются layouts в gdb, чтобы увидеть, как другие варианты компоновки используют help layout, доступные варианты: layout src (этот ответ), layout asm, layout split, layout regs.

lol 30.04.2020 12:19

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

sudo apt-get install cgdb

cs01 24.02.2016 21:29

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

Hi-Angel 10.06.2019 14:59

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

Franklin Yu 22.07.2020 04:16

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

Franklin Yu 22.07.2020 04:25

О, про мусор вывода терминала это известная проблема не исправлена. К сожалению, сопровождающий не ответил на этот вопрос.

Franklin Yu 22.07.2020 04:45

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

# 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 за счет использования цветов. Это делается любым из следующих способов:

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

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

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

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

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

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

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

"Beautify GDB", 12 мая 2010 г. (через archive.org)

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

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

Lucian Adrian Grijincu 27.04.2012 22:35

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

musiphil 14.09.2013 04:35

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

Alex Quinn 25.09.2014 00:50

@Mike, похоже, что вы являетесь автором сообщений в блоге; если да, сообщите об этом в ответе.

David Z 20.02.2015 04:14

Для минималистичного ответа лучше использовать set prompt \1\033[1;31m\2(gdb) \1\033[m\2, иначе редактирование строки в приглашении будет прервано.

catpnosis 13.10.2018 13:05

#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. Спасибо за совет!

Randall Cook 11.09.2014 03:07
Ответ принят как подходящий

.gdbinit

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

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

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

A PEDA replacement. In the spirit of our good friend windbg, pwndbg is pronounced pwnd-bag.

  • Speed
  • Resiliency
  • Clean code

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

pwndbg

вольтрон

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

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).

voltron

ГЭФ

ГЭФ - еще один вариант, описанный как:

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.

GEF

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

vak 05.06.2015 15:47

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

BenC 13.06.2015 06:50

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

Решением было использовать 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)

Рабочий пример, использующий ловушку - пусть даже минимальный -, вероятно, был бы более желанным.

Hi-Angel 10.06.2019 14:49

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

before - after

Он говорит мне bash: colout: command not found, когда я запускаю bt f

user 03.07.2019 20:57

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

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

Johan Bjäreholt 29.01.2018 17:05

Новое в предстоящем 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.

screenshot of gdb 8.2.91.20190401-23.fc30

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

user 03.07.2019 21:47

Другие вопросы по теме