2008-10-16 13 views
139

请不要回复我应该使用ddd,nemiver,emacs,vim或任何其他前端,我只是更喜欢gdb,但希望看到它的输出与一些终端颜色。如何在交互式调试过程中突出显示和着色gdb输出?

+4

它不会给你颜色(所以我不会称这为答案),但一些〜/ .gdbinit配置将改善体验。我用这个作为最低限度: 集历史节省 集打印漂亮 组输出基数16 设定高度0 – 2008-11-19 19:35:37

+0

这将是很好的改变公认的答案,所以我老了,不正确的答案可以被删除。谢谢。 – ddaa 2014-11-20 09:00:58

+0

一旦突出显示`l`上的当前行被执行https://sourceware.org/bugzilla/show_bug.cgi?id=21044,我将`l`加入`hook-stop`并输入Dev Nirvana。 – 2017-08-02 07:38:37

回答

140

.gdbinit更好

你可以调整~/.gdbinit有颜色。您可以使用钱财的.gdbinit这可以在这里找到:

https://github.com/gdbinit/gdbinit

你可以调整你想太多也不亚于。我发现这要归功于this SO answer。下面是你可以得到的输出类型:

.gdbinit

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

在一个侧面说明,同样的想法也applied to lldb

GDB控制板

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

GDB Dashboard

(无效)步行者

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

@dholm还提供了从激发了他自己的.gdbinit前一个。

(void)walker

pwndbg

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

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

  • 速度
  • 弹性
  • 清洁代码

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

pwndbg

战神金刚

project的描述中指出:

战神金刚为黑客一个可扩展的调试器UI。它允许你在你的调试器(LLDB 或GDB)上运行在其他终端上运行的实用程序视图 附加实用程序视图,显示有用的信息,如反汇编,堆栈 内容,寄存器值等,同时仍然给你相同的 调试器CLI习惯于。

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

voltron

GEF

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

其目的是要通过剥削主要用于和反向工程师, 提供附加特征到GDB使用Python API在动态分析和利用开发过程中协助 。

GEF

81

这不是颜色,但考虑gdb的text gui。它对gdb的可用性有着巨大的影响。

你可以启动它:

gdb -tui executable.out 

截图:

enter image description here

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

  • 显示了源线我们在和周围的线
  • 显示断点
+4

哇!谢谢!我一直在寻找一个很棒的gdb图形外壳,我已经尝试过xxgdb,kgdb和ddd,但是它们都不是很适合我,所以我坚持使用普通的旧命令行界面。但这绝对是完美的! – 2009-01-10 19:47:06

+38

Ctrl-x Ctrl-a:输入此项以切换文本gui模式,即使没有命令行选项也可以使用。 – jturcotte 2010-11-05 14:10:17

+1

从程序打印到标准输出打破了我的界面。除了重定向它之外的任何解决方法? – 2015-05-09 09:25:27

40

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

-1

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

# 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 
15

通过使用颜色可以大大增强gdb的出现。这可以通过以下任何方法完成:

  1. 通过“设置提示符”进行彩色提示。例如,使提示变为粗体和红色:set prompt \033[1;31m(gdb) \033[m
  2. 通过钩子的彩色命令
  3. “list”命令的彩色语法高亮显示。

所有的例子都可以在由迈克尔·凯莱赫写了下面的博客文章:

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

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

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

cgdbgdb -tui

3

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

的解决方案是使用GDB-蟒蛇(上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) 
1

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