如何在交互式调试期间突出显示和着色gdb输出?

时间:2008-10-16 17:33:08

标签: gdb terminal colors

请不要回复我应该使用ddd,nemiver,emacs,vim或任何其他前端,我只是喜欢gdb,但希望看到它的输出带有一些终端颜色。

11 个答案:

答案 0 :(得分:166)

.gdbinit

您可以调整~/.gdbinit以获得颜色。您可以使用此处提供的mammon .gdbinit

https://github.com/gdbinit/gdbinit

您也可以根据需要调整它。我发现这要归功于this SO answer。以下是您可以获得的输出类型:

.gdbinit

还可以使用GitHub存储库:https://github.com/gdbinit/Gdbinit

另一方面,同样的想法也是applied to lldb

GDB仪表板

遵循相同的概念,GDB Dashboard为Python中的GDB提供了模块化可视化界面。

GDB Dashboard

(无效)助行

另一个类似的项目使用GDB的Python支持来提供更多的可扩展性,因此值得一试:https://github.com/dholm/voidwalker

@dholm还提供了自己的.gdbinit灵感来自前一个。

(void)walker

pwndbg

有些项目提供了一系列有用的功能,包括改进的显示功能。 PEDApwndbg就属于这种情况。后者给出了以下描述:

  

PEDA替代品。本着我们的好朋友windbg的精神,pwndbg发音为pwnd-bag

     
      
  • 速度
  •   
  • 弹性
  •   
  • 清洁代码
  •   

它提供了支持调试和利用开发的命令,类似于PEDA的开发,并且更好地显示(尽管这不是项目的主要焦点)。该软件仍在开发中,尚未正确发布。

pwndbg

战神金刚

project说明声明:

  

Voltron是黑客的可扩展调试器UI。它允许你   将在其他终端中运行的实用程序视图附加到调试器(LLDB   或GDB),显示有用的信息,如反汇编,堆栈   内容,注册值等,同时仍然给你相同的   您习惯使用的调试器CLI。

您可以修改.gdbinit以自动集成它。但是,显示器本身在GDB之外(例如在tmux拆分中)。

voltron

GEF

GEF是另一种选择,它被描述为:

  

它的目的主要是被剥削者和反向工程师使用   使用Python API为GDB提供其他功能以提供帮助   在动态分析和利用开发过程中。

GEF

答案 1 :(得分:90)

这不是颜色,但考虑gdb的text gui。它对gdb的可用性有很大的不同。

您可以使用以下命令启动它:

gdb -tui executable.out

截图:

enter image description here

如您所见,主要功能是:

  • 显示我们所在的源代码行和周围的行
  • 显示断点

答案 2 :(得分:43)

我知道你不想要一个前端。 但cgdb如何与gdb非常接近, 它是textmode,但上面有一个源窗口,代码上有语法高亮。

答案 3 :(得分:16)

通过使用颜色可以大大增强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”命令的彩色语法高亮显示。
  4. 所有示例均可在Michael Kelleher撰写的以下博客文章中找到:

    "Beautify GDB", May 12, 2010 (via archive.org)

    "Experimental GDB syntax highlighting", May 15, 2010 (via archive.org)

答案 4 :(得分:6)

#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支持,'用户模式'黑客。

找到主要部分here 并修改了一下。需要突出,c ++ filt。如果颜色混乱,请发出重新命令。

答案 5 :(得分:5)

cgdbgdb -tui

好得多

答案 6 :(得分:4)

整洁,我刚刚使用colout发现了这个hack:https://github.com/nojhan/colout/blob/master/colout/example.gdbinit

before - after

答案 7 :(得分:3)

我想强调如下:强调属于我的源文件(而不是库)的堆栈跟踪的行。

解决方案是使用gdb-python(在MSYS上;在Linux上通常gdb已经内置了Python?),钩子backtrace,使用

python stack_trace = gdb.execute('backtrace', False, True')

然后使用Python的正则表达式处理stack_trace并打印出来。大胆和其他颜色通过以下功能实现:

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)

答案 8 :(得分:2)

this configuration给出了另一种良好的颜色组合。它使得回溯检查变得更加容易。要使用它,只需将该文件保存为~/.gdbinit并正常运行gdb

答案 9 :(得分:2)

即将发布的 GDB 8.3新功能!

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

  

终端样式现在可用于CLI和TUI。 GNU来源   高亮还可以用于提供源代码样式   片段。有关更多信息,请参见下面的“设置样式”命令。

screenshot of gdb 8.2.91.20190401-23.fc30

答案 10 :(得分:-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