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


172

返信しないでください。ddd、nemiver、emacs、vim、またはその他のフロントエンドを使用する必要があります。そのままgdbを使用したいのですが、端末の色で出力を確認したいと考えています。


4
それはあなたに色を与えません(それで私はこれを答えとはしません)が、いくつかの〜/ .gdbinit設定は経験を改善します。私はこれを最低限使用します:set history save on set print pretty set output-radix 16 set height 0
activout.se

受け入れた回答を変更して、私の古い間違った回答を削除できるようにするとよいでしょう。ありがとう。
ddaa 2014年

l実装されている現在の行を強調表示したら、sourceware.org/bugzilla/show_bug.cgi?id=21044を追加lし、aに追加してhook-stopDev Nirvanaと入力します。
Ciro Santilli郝海东冠状病六四事件法轮功

回答:


183

.gdbinit

微調整~/.gdbinitして色を付けることができます。.gdbinitここで入手できるマモンを使用することができます:

https://github.com/gdbinit/gdbinit

好きなだけ調整することもできます。私はこのSOの答えのおかげでこれを見つけました。取得できる出力の種類は次のとおりです。

.gdbinit

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

余談ですが、lldbにも同じ考え方が適用されました

GDBダッシュボード

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

GDBダッシュボード

(ボイド)ウォーカー

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

@dholmまた彼自身の提供.gdbinit前のものからインスピレーションを得ています。

(ボイド)ウォーカー

pwndbg

一部のプロジェクトは、表示の改善など、一連の便利な機能を提供します。これは、PEDAまたはpwndbgの場合です。後者は以下の説明を与えます:

PEDAの代替品。私たちの良き友人の精神ではwindbgpwndbg発音されますpwnd-bag

  • 速度
  • 弾力性
  • クリーンなコード

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

pwndbg

Voltron

プロジェクトの説明状態:

Voltronは、ハッカー向けの拡張可能なデバッガーUIです。他の端末で実行されているユーティリティビューをデバッガー(LLDBまたはGDB)にアタッチして、逆アセンブリ、スタックの内容、レジスター値などの役立つ情報を表示しながら、使い慣れた同じデバッガーCLIを提供できます。

を変更して.gdbinit、自動的に統合することができます。ただし、ディスプレイ自体はGDBの外部にあります(例:tmux split内)。

Voltron

GEF

GEFは別のオプションであり、次のように説明されています。

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

GEF


回答ありがとうございます。レジスタ出力をオフにする方法はありますか?(私はC ++コードにgdbを使用しており、アセンブラレベルをすぐに必要としません)
vak

はい。くそー「コメントは15文字以上である必要があります。」
2015年

1
@vak試しましたset $SHOWCPUREGISTERS = 0か?基本的に、設定できるパラメータいくつかあり、必要に応じてコードをいつでも変更できます。
BenC、2015年

100

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

あなたはそれを起動することができます:

gdb -tui executable.out

スクリーンショット:

ここに画像の説明を入力してください

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

  • 現在のソースのラインとその周囲のラインを示します
  • ブレークポイントを表示します

5
うわー!ありがとう!私はgdbの周りに素敵なグラフィカルシェルを長い間探していましたが、xxgdb、kgdb、dddを試してみましたが、どれもうまく機能しなかったので、単純な古いコマンドラインインターフェースを使い続けました。しかし、これは完全に完璧です!
Thomas Padron-McCarthy

46
Ctrl-x Ctrl-a:これを入力すると、テキストguiモードに切り替えたり、テキストguiモードから切り替えたりできます。コマンドラインオプションがなくても機能します。
jturcotte 2010年

2
プログラムからstdoutに出力すると、インターフェースが壊れます。リダイレクト以外の回避策はありますか?
Ciro Santilli郝海东冠状病六四事件法轮功

1
stdoutがインターフェイスを壊すことで同じ問題が発生します。Ctrl-Lまたは再描画バインディングが何であれ、少なくともそれを使用できるようにします。vi編集モードが有効になっているユーザーの場合、Ctrl-X Ctrl-Aは機能しませんが、コマンド 'layout src'を使用すると、画像のようにソースが表示されたTUIモードになります。
wilywampa

1
2番目の端末を開き、次のコマンドを発行します。$ tty結果を使用し、(gdb)set inferior-ttyコマンドを使用して、gdbセッションからその端末にstdoutを送信します。例。私の.gdbinitセットinferior-tty / dev / tty2から、標準出力が$ gdb -tuiを台無しにしないようになりました。
netskink 2016年

46

フロントエンドが欲しくないのは知っています。しかし、それはgdbに非常に近いcgdbについてはどうですか?それはテキストモードですが、ソースウィンドウがあり、コード上で構文が強調表示されています。


2
sudo apt-get install cgdb
cs01

2
真のセレンディピティ:)
無視

実行してみたところ、gdbの履歴が表示されず、また、キャレットと記号が入力されている実際の場所との間に空白があり、プロンプトがねじ込まれています(これは、色付きのプロンプトが表示されいるためと考えられます) gdb。まったく感動していません。
ハイエンジェル

19

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

  1. 「設定プロンプト」を介して色分けされたプロンプト。たとえば、プロンプトを太字と赤にします。

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

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

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

    ここに画像の説明を入力してください

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

  3. 「list」コマンドの色分けされた構文の強調表示。

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

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

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


14
リンクが壊れています。
ジョンカーター

7
@マイク:サイトにアクセスできなくなり、robots.txtによってarchive.orgがインデックスに登録できなくなったため、これらのリンクのコンテンツをここに投稿すると便利です。
Lucian Adrian Grijincu、2012

1
ここで関連情報を取得できます:sourceware.org/gdb/current/onlinedocs/gdb/Prompt.html
musiphil

1
リンクは、ブログ投稿のarchive.orgキャッシュを指すようになりました。
Alex Quinn

1
@マイクさん、あなたはブログ投稿の作成者のようです。もしそうなら、あなたは答えでそれを開示するべきです。
デビッドZ

13

今後のGDB 8.3の新機能

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

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

gdb 8.2.91.20190401-23.fc30のスクリーンショット


これまででベストアンサー!ここには、gdb 8.3 medium.com / @ simonconnah /…をインストールする方法に関するチュートリアルがあります。マシンに最低512MBのRAM が必要であることに注意してくださいgcc。そうしないと、コンパイラがゴミを出し始めます。
ユーザー

7
#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 ++ filt。色がめちゃくちゃになる場合は、コマンドを再発行してください。


7

cgdb よりはるかに優れています gdb -tui


同意した。私のプログラムによって出力された単純な行は、gdb -tuiのコンソールを破棄しました。これはcgdbでは起こりません。先端をありがとう!
ランドールクック


4

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

解決策は、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)

フックを使用する実際の例は、たとえ最小限であっても、おそらくより歓迎されます。
Hi-Angel

4

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


おかげで、これはまさに私が探していたものでした。私は長い呼び出しスタックを持つマルチスレッドアプリケーションを調べていましたが、これはそれらのバックトレースに最適です。
JohanBjäreholt18年

-2

好きな色を手に入れることができます。

# 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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.