Як виділити та кольоровий вихід gdb під час інтерактивної налагодження?


172

Будь ласка, не відповідайте, я повинен використовувати ddd, nemiver, emacs, vim або будь-який інший фронт-енд, я просто віддаю перевагу gdb таким, яким він є, але хотів би побачити його вихід з деякими термінальними кольорами.


4
Він не дасть вам кольорів (тому я не називатиму це відповіддю), але деяка конфігурація ~ / .gdbinit поліпшить роботу. Я використовую це як мінімальний мінімум: встановити історію збереження на набір друку досить встановити вихід-радіакс 16 встановити висоту 0
Activout.se

Було б непогано змінити прийняту відповідь, щоб мою стару, неправильну відповідь можна було видалити. Дякую.
ddaa

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

Відповіді:


183

.gdbinit

Ви можете налаштувати свої ~/.gdbinitкольори. Ви можете використовувати мамонів, .gdbinitякі доступні тут:

https://github.com/gdbinit/gdbinit

Ви можете налаштувати його скільки завгодно. Я знайшов це завдяки цій відповіді ТАК . Ось такий вихід, який ви можете отримати:

.gdbinit

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

З боку, ця ж ідея була застосована і до lldb .

Інформаційна панель GDB

Дотримуючись тієї ж концепції, приладна панель GDB забезпечує модульний візуальний інтерфейс для GDB в Python.

Інформаційна панель GDB

(нікчемний) ходок

Ще один подібний проект використовує підтримку Python GDB для забезпечення більшої розширюваності, тому це варто перевірити: https://github.com/dholm/voidwalker

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

(нікчемний) ходок

pwndbg

Деякі проекти надають набір корисних функцій, включаючи покращений показ. Це стосується PEDA або pwndbg . Останній дає такий опис:

Заміна PEDA У дусі нашого доброго друга windbg, pwndbgвимовляється pwnd-bag.

  • Швидкість
  • Стійкість
  • Чистий код

Він надає команди для підтримки налагодження та використання розробок, подібних до PEDA, та кращого відображення (хоча це не головна увага проекту). Програмне забезпечення все ще знаходиться на стадії розробки та ще не було належним чином випущено.

pwndbg

вольтрон

В описі проекту зазначено:

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

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

вольтрон

GEF

GEF - це ще один варіант, який описується як:

Він призначений для використання в основному експлуататорами та реверс-інженерами для надання додаткових функцій GDB за допомогою API Python для надання допомоги в процесі динамічного аналізу та розробки експлуатації.

GEF


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

так. Чорт "Коментар повинен бути не менше 15 символів."
vak

1
@vak ти спробував set $SHOWCPUREGISTERS = 0? В основному у вас є кілька параметрів, які ви можете встановити , і ви завжди можете змінити код відповідно до своїх потреб.
Бенк

100

Це не кольори, але врахуйте текст gib gui . Це має велику різницю в тому, наскільки корисним є gdb.

Ви можете запустити його за допомогою:

gdb -tui executable.out

Знімок екрана:

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

Як бачите, основними особливостями є:

  • показує, на якій лінії джерела ми знаходимось та навколишні лінії
  • показує точки прориву

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

46
Ctrl-x Ctrl-a: Введіть це, щоб переключитися в режим текстового інтерфейсу та з нього, працює навіть без параметра командного рядка.
jturcotte

2
Друк до stdout з програми порушує для мене інтерфейс. Будь-яке обхідне рішення, окрім перенаправлення?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

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

1
Відкрийте другий термінал і видайте команду: $ tty Використовуйте результат, щоб направити stdout з сеансу gdb до цього терміналу, використовуючи команду (gdb) set inferior-tty. колишній від мого .gdbinit встановити inferior-tty / dev / tty2, тепер ваш stdout не зіпсує $ gdb -tui.
netskink

46

Я знаю, що ви не хотіли фронтенду. А як щодо cgdb, він дуже близький до gdb, це textmode, але має вікно джерела вгорі з виділенням синтаксису на коді.


2
sudo apt-get install cgdb
cs01

2
Справжня серединність :)
Невідомий

Щойно спробував запустити: він не бачить жодної історії gdb, і він також має підкручений підказку, де є певний пробіл між каретою та фактичним місцем, де вводиться символ (це, ймовірно, тому, що у мене кольоровий рядок у gdb ) . Не вражений взагалі.
Привіт-Ангел

19

Можна значно покращити появу gdb за допомогою використання кольорів. Це робиться за допомогою будь-якого з наступних методів:

  1. Кольорова підказка через "встановити підказку". Наприклад, зробіть рядок жирним і червоним:

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

    або зробіть підказку новою формою, жирною та червоною:

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

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

  2. Кольорові команди через гачки

  3. Кольорова підсвітка синтаксису команди «список».

Усі приклади доступні в наступних публікаціях блогу, написаних Майклом Келхером:

"Прикрасити ГДБ", 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
@Mike, здається, ви автор публікацій в блозі; якщо так, то слід розкрити це у відповіді.
David Z

13

Нове у майбутньому GDB 8.3!

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

Тепер стилі терміналів доступні для CLI та TUI. GNU Source Highlight можна додатково використовувати для створення фрагментів вихідного коду. Для отримання додаткової інформації дивіться команди "встановити стиль" нижче.

скріншот 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 re.


7

cgdb набагато краще, ніж gdb -tui


Домовились. Прості рядки, надруковані моєю програмою, переробили консоль gdb -tui. Це не відбувається під cgdb. Дякую за пораду!
Randall Cook


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.