web-dev-qa-db-ja.com

対話型デバッグ中にgdb出力を強調表示および色付けする方法は?

私はddd、nemiver、emacs、vim、またはその他のフロントエンドを使用する必要があると返信しないでください。

157
elmarco

.gdbinit

~/.gdbinitを微調整して色を付けることができます。ここから入手できるmammonの.gdbinitを使用できます。

https://github.com/gdbinit/gdbinit

必要なだけ調整することもできます。 this SO answer のおかげでこれを見つけました。以下のような出力が得られます。

.gdbinit

GitHubリポジトリも利用可能です: https://github.com/gdbinit/Gdbinit

ちなみに、同じ考えは lldbに適用 でした。

GDBダッシュボード

同じ概念に従って、 GDBダッシュボード は、PythonでGDBのモジュラービジュアルインターフェイスを提供します。

GDB Dashboard

(ボイド)ウォーカー

別の同様のプロジェクトは、GDBのPythonサポートを使用して拡張性を高めるため、チェックアウトする価値があります。 https://github.com/dholm/voidwalker

また、@ dholmは、以前のものに触発された独自の 。gdbinit を提供します。

(void)walker

pwndbg

一部のプロジェクトでは、表示の改善など、一連の便利な機能を提供しています。 [〜#〜] peda [〜#〜] または pwndbg の場合です。後者の説明は次のとおりです。

PEDAの代替品。私たちの親友windbgの精神で、pwndbgpwnd-bagと発音されます。

  • 速度
  • 弾力性
  • きれいなコード

PEDAのものと同様のデバッグとエクスプロイト開発をサポートするコマンドを提供し、表示を改善します(ただし、これはプロジェクトの主な焦点ではありません)。ソフトウェアはまだ開発中であり、まだ適切にリリースされていません。

pwndbg

ヴォルトロン

project 説明の状態:

Voltronは、ハッカー向けの拡張可能なデバッガUIです。これにより、他のターミナルで実行されているユーティリティビューをデバッガー(LLDBまたはGDB)にアタッチして、逆アセンブリ、スタックの内容、レジスタ値などの有用な情報を表示しながら、以前と同じデバッガーCLIを使用できます。

.gdbinitを変更して、自動的に統合できます。ただし、ディスプレイ自体はGDBの外部にあります(たとえば、tmuxスプリット内)。

voltron

GEF

[〜#〜] gef [〜#〜] は別のオプションであり、次のように記述されます。

Python APIを使用してGDBに追加機能を提供し、動的分析およびエクスプロイト開発のプロセスを支援するために、主にエクスプロイトおよびリバースエンジニアが使用することを目的としています。

GEF

171
BenC

色ではありませんが、gdbの text gui を検討してください。これは、gdbの使用方法に大きな違いをもたらします。

以下で起動できます:

gdb -tui executable.out

スクリーンショット:

enter image description here

ご覧のとおり、主な機能は次のとおりです。

  • ソースのどの行とその周辺の行を示します
  • ブレークポイントを表示します
92
John Carter

フロントエンドが必要ないことは知っています。しかし、 cgdb はgdbに非常に近いです。テキストモードですが、ソースウィンドウがあり、コードの構文が強調表示されています。

44
Johan

色を使用することにより、gdbの外観を大幅に向上させることができます。これは、次のいずれかの方法で実行されます。

  1. 「プロンプトの設定」による色付きプロンプト。たとえば、プロンプトを太字で赤にします。

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

    または、プロンプトを新しい形、太字と赤にします。

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

    enter image description here

  2. フックによる色付けされたコマンド

  3. 「リスト」コマンドの色付き構文強調表示。

すべての例は、Michael Kelleherが書いた次のブログ投稿で入手できます。

「GDBの美化」、2010年5月12日(archive.org経由)

「実験的GDB構文強調表示」、2010年5月15日(archive.org経由)

18
Mike
#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。色がおかしくなったら、reコマンドを発行してください。

7
ftk

cgdbgdb -tui

7
justin.yqyang

ニート、coloutを使用してこのハックを見つけました: https://github.com/nojhan/colout/blob/master/colout/example.gdbinit

before - after

5
elmarco

私は次のように強調したかったです:(ライブラリではなく)ソースファイルに属するスタックトレースの行を強調します。

解決策は、gdb-pythonを使用することでした(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)
4
Evgeni Sergeev

今後の新機能GDB 8.3!

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

CLIおよびTUIでターミナルスタイリングが使用できるようになりました。 GNUソースハイライトは、ソースコードスニペットのスタイリングを提供するためにさらに使用できます。詳細については、以下の「スタイルの設定」コマンドを参照してください。

screenshot of gdb 8.2.91.20190401-23.fc30

4
elmarco

色の別の適切な組み合わせは、 この構成 で与えられます。バックトレースの検査がはるかに簡単になります。使用するには、そのファイルを~/.gdbinitとして保存し、通常どおりgdbを実行します

3
Andrea Araldo