2008-10-16 12 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