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

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

71466 次浏览

它不是颜色,而是广东发展银行的 发短信给 GUI,它对广东发展银行的可用性产生了巨大的影响。

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

gdb -tui executable.out

截图:

enter image description here

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

  • 显示了我们所在的源的哪条线以及周围的线
  • 显示断点
我知道你不想要一个封面。 但是 Cgdb怎么样,它非常接近 gdb, 它是 textmode,但是上面有一个源窗口,代码上有语法高亮显示。

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

# 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

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

  1. 通过“设置提示符”将提示符变成彩色,例如,将提示符变成粗体和红色:

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

    或者将提示符设置为新的形状,粗体和红色:

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

    < img src = “ https://i.stack.imgur.com/f8NZl.png”alt = “ enter image description here”> < img src = “ https://i.stack.imgur.com/f8NZl.png”alt = “ enter image description here”>

  2. 通过钩子着色的命令

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

所有的例子都可以在 Michael Kelleher 写的以下博文中找到:

美化 GDB,2010年5月12日

“实验性广发行语法突显”,2010年5月15日

#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 + + 过滤。如果颜色混乱,发出重新命令。

cgdbgdb -tui好得多

。 gdbinit

您可以调整您的 ~/.gdbinit有颜色。您可以使用财富的 .gdbinit,这是可在这里:

翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳 https://github.com/gdbinit/gdbinit

你想怎么调整就怎么调整。多亏了 这么回答我找到了这个。下面是您可以获得的输出类型:

.gdbinit

还有一个 GitHub 存储库: https://github.com/gdbinit/Gdbinit

另一方面,同样的想法也是 应用于 ldb

GDB 仪表盘

遵循同样的概念,GDB 仪表盘在 Python 中为 GDB 提供了一个模块化的可视化接口。

译自: 美国《科学》杂志网站(http://i.stack.imgur.com/mHC8f.png)原著: http://i.stack.imgur.com/mHC8f.png

Walker

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

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

(void)walker

你好

一些项目提供了一组有用的功能,包括改进的显示。这是 PEDA你好的情况。后者描述如下:

本着我们的好朋友 windbg的精神,pwndbg的发音是 pwnd-bag

  • 速度
  • 适应能力
  • 干净的代码

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

译自: 美国《科学》杂志网站(http://i.stack.imgur.com/BuVHv.png)原著: http://i.stack.imgur.com/BuVHv.png

战神金刚

项目描述说明:

Voltron 是一个针对黑客的可扩展的调试器 UI 将其他终端中运行的实用工具视图附加到调试器(LLDB) 或 GDB) ,显示有用的信息,如反汇编,堆栈 内容,注册值等,同时仍然给你相同的 调试器 CLI

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

译自: 美国《科学》杂志网站(https://i.stack.imgur.com/7eWF1.png)原著: http://i.stack.imgur.com/7eWF1.png

全球环境基金

全球环境基金是另一种选择,它被描述为:

它主要被开发者和逆向工程师使用 使用 Python API 为 GDB 提供额外的特性 在动态分析和开发的过程中

译自: 美国《科学》杂志网站(http://i.stack.imgur.com/EpxEz.png)原著: http://i.stack.imgur.com/EpxEz.png

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

解决方案是使用 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)

很好,我刚刚发现这个黑客使用了 Colout: https://github.com/nojhan/colout/blob/master/colout/example.gdbinit

before - after

另一个好的颜色组合是由 这个配置给出的。这使得检查回溯痕迹变得更加容易。要使用它,只需将该文件保存为 ~/.gdbinit并正常运行 gdb 即可

新的即将到来的 GDB 8.3!

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

终端样式现在可用于 CLI 和 TUI 突出显示还可以用来提供源代码的样式 有关更多信息,请参见下面的“ set style”命令

译自: 美国《每日邮报》网站(https://i.stack.imgur.com/k7Ym4.png)原著: http://i.stack.imgur.com/k7Ym4.png/alt = “ gdb 8.2.91.20190401.23.fc30”