如何在交互式debugging过程中突出显示和着色gdb输出?

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

.gdbinit

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

http://reverse.put.as/gdbinit/

你可以尽可能多地调整它。 我发现这个感谢这个答案 。 以下是您可以获得的输出types:

.gdbinit

一个GitHub仓库也可用: https : //github.com/gdbinit/Gdbinit

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

GDB仪表板

遵循相同的概念, GDB仪表板为Python中的GDB提供了一个模块化的可视化界面。

GDB仪表板

(空隙)步行者

另一个类似的项目使用GDB的Python支持来提供更多的可扩展性,所以这是值得检查的: https : //github.com/dholm/voidwalker

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

(空隙)步行者

pwndbg

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

一个PEDA更换。 在我们的好朋友windbg的精神, pwndbg发音pwnd-bag

  • 速度
  • 弹性
  • 清洁代码

它提供了一些命令来支持debugging和开发类似于PEDA的开发,并且更好地显示(尽pipe这不是项目的主要焦点)。 该软件还在开发中,尚未正式发布。

pwndbg

战神金刚

项目说明指出:

Voltron是一个可扩展的黑客debugging器UI。 它允许您将运行在其他terminal上的实用程序视图附加到debugging器(LLDB或GDB),显示有用的信息,如反汇编,堆栈内容,寄存器值等,同时仍然为您提供与之相同的debugging器CLI。

您可以修改.gdbinit以自动整合它。 但是,显示器本身在GDB之外(例如在一个tmux分割中)。

战神金刚

GEF

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

它的目标主要是被开发者和反向工程师使用,为使用Python API的GDB提供额外的function,在dynamic分析和开发过程中提供帮助。

GEF

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

你可以用以下方式启动它:

 gdb -tui executable.out 

截图:

在这里输入图像说明

正如你所看到的,主要特点是:

  • 显示了我们的线路和周围的线路
  • 显示断点

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

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

  1. 通过“设置提示”彩色提示。 例如,使提示加粗和红色: set prompt \033[1;31m(gdb) \033[m
  2. 彩色命令通过钩子
  3. “list”命令的着色语法突出显示。

所有的例子都可以在以下Michael Kelleher写的博客文章中find:

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

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

 #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的支持,“用户模式”破解。

在这里find主要部分,并修改了一下。 需要突出显示,c ++ filt。 如果颜色混乱问题重新命令。

cgdbgdb -tui

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

解决的办法是使用gdb-python(在MSYS上;在Linux上通常gdb自带内置的Python),hook backtrace ,use

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

然后用Python的正则expression式处理stack_trace ,并打印出来。 大胆和其他颜色是通过这样的function实现的:

 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

前后

这种configuration给出了颜色的另一个很好的组合。 它使得检查回溯更容易。 要使用它,只需将该文件保存为~/.gdbinit并正常运行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