189

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

4

11 回答 11

198

.gdbinit

你可以调整你~/.gdbinit的颜色。您可以使用.gdbinit这里提供的mammon:

https://github.com/gdbinit/gdbinit

您也可以随意调整它。由于这个 SO answer ,我发现了这一点。这是您可以获得的输出类型:

.gdbinit

GitHub 存储库也可用:https ://github.com/gdbinit/Gdbinit

另一方面,同样的想法也适用于 lldb

GDB 仪表板

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

GDB 仪表板

(无效)步行者

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

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

(无效)步行者

密码数据库

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

PEDA 替代品。在我们的好朋友的精神windbgpwndbg是明显的pwnd-bag

  • 速度
  • 弹性
  • 干净的代码

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

密码数据库

伏创

项目描述指出:

Voltron 是一个面向黑客的可扩展调试器 UI。它允许您将在其他终端中运行的实用程序视图附加到您的调试器(LLDB 或 GDB),显示有用的信息,例如反汇编、堆栈内容、寄存器值等,同时仍为您提供您习惯的相同调试器 CLI。

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

伏创

全球环境基金

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

它主要由漏洞利用者和逆向工程师使用,使用 Python API 为 GDB 提供附加功能,以协助动态分析和漏洞利用开发过程。

全球环境基金

于 2013-06-27T10:58:52.330 回答
105

这不是颜色,而是考虑 gdb 的文本 gui。它对 gdb 的可用性有很大的影响。

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

gdb -tui executable.out

截屏:

在此处输入图像描述

如您所见,主要特点是:

  • 显示我们在源的哪一行和周围的行
  • 显示断点
于 2008-10-30T10:21:55.933 回答
46

我知道你不想要前端。但是cgdb怎么样,它非常接近 gdb,它是文本模式,但上面有一个源窗口,代码上有语法高亮显示。

于 2009-02-06T21:10:30.747 回答
20

即将推出的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 截图

于 2019-04-09T14:38:33.763 回答
18

通过使用颜色可以大大增强 gdb 的外观。这是通过以下任何一种方法完成的:

  1. 通过“设置提示”进行彩色提示。例如,使提示变为粗体和红色:

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

    或者使提示变成新的形状,粗体和红色:

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

    在此处输入图像描述

  2. 通过钩子着色命令

  3. “list”命令的彩色语法突出显示。

Michael Kelleher 撰写的以下博客文章中提供了所有示例:

“美化 GDB”,2010 年 5 月 12 日(来自 archive.org)

“实验性 GDB 语法高亮”,2010 年 5 月 15 日(通过 archive.org)

于 2010-07-15T14:33:58.557 回答
8

cgdbgdb -tui

于 2013-04-10T03:34:24.967 回答
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 支持,“用户模式”破解。

在这里找到了主要部分 并对其进行了一些修改。需要高亮,c++filt。如果颜色弄乱了发出重新命令。

于 2012-05-02T16:51:48.203 回答
5

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

之前 - 之后

于 2014-10-20T10:02:34.950 回答
4

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

解决方案是使用 gdb-python (在 MSYS 上;在 Linux 上通常gdb已经内置了 Python?), hook 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)
于 2014-01-18T08:09:46.060 回答
4

这种配置提供了另一种很好的颜色组合。它使检查回溯变得更加容易。要使用它,只需将该文件另存为~/.gdbinit并正常运行 gdb

于 2017-10-13T15:31:35.080 回答
-3

你可以得到任何你想要的颜色;

# 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
于 2009-07-14T04:16:07.047 回答