gdbをVimと統合するにはどうすればよいですか?


52

画面の上部にソースコードを表示する代わりに、gdbtuiまたはそのctrl+xgdbに、Vimエディターでタブ間を移動し、それに応じてバッファーを表示することを希望します。

これどうやってするの?


参考までに、lldb plugin @ github.com/gilligan/vim-lldbを見つけ、スクリーンショットは有望に見えます。
名前

ところで、誰もwindbgについて何か知っていますか?Vimの統合は良いアイデアかもしれません。しかし、実際には、ほとんどすべてのソフトウェアについてこれを考えています。
eyal karni

回答:


33

私が試したすべてのプラグインの中で、ConqueGDBが最良のアプローチであることがわかりました。ConqueGDBは、Conque Shellを使用して、GDBが使用するvim内にインタラクティブシェルを埋め込みます。

ConqueGDBを使用したワークフローは、GDBターミナルでGDBコマンドを入力するのではなく、vimソースコードでショートカットを使用します。ただし、必要に応じてGDBプロンプトを引き続き使用することも、より高度なコマンドを使用することも、スクロールしてデバッグセッション全体を表示することもできます。

いくつかのConqueGDBのデフォルトマッピング、たとえば:

  • leaderr :実行
  • leaderc : 持続する
  • leaders :ステップ
  • leaderp :カーソルの下に変数を出力

vimカーソル行がGDB「行の印刷」を発行するためにどのように使用され、コードの現在の実行が別の行(14)にあり、行10にブレークポイントがあることに注意してください。

CongueGDBを使用したvim

たとえば、Vundleでインストールするには:

Plugin 'vim-scripts/Conque-GDB'

これらのプラグインオプションを使用します。

let g:ConqueTerm_Color = 2         " 1: strip color after 200 lines, 2: always with color
let g:ConqueTerm_CloseOnEnd = 1    " close conque when program ends running
let g:ConqueTerm_StartMessages = 0 " display warning messages if conqueTerm is configured incorrectly  

どういうleader意味ですか?
In78

@ In78これは、ほとんどのコンピューターの<kbd> \ </ kbd>キーを意味します。たとえば<leader>r、コンピューター上の<kbd> \ </ kbd> + <kbd> r </ kbd>を意味します。Vimマニュアルには次のエントリがあります:help leader
。– Parsa

このConqueGDBのデフォルトマッピングを忘れないでください<Leader>b。カーソル位置にブレークポイントを設定します。ただし、これはトグルではないため、これを使用して再度削除することはできません。むしろ、GDBプロンプトに「clear」と書く必要があります。
-serup

私はこのConqueGdbを使用しようとしましたが、それを機能させるために、最初に実行可能ファイルを指定します-ブレークポイントの設定で失敗することがあります-ブレークポイントが表示される前にgdbウィンドウにフォーカスし、挿入するためにIを押す必要があります-これはConqueGdbの正常ですか?
serup

11

gdbを統合するプラグインがいくつかあります。

  • pyclewnを使用していました。このプロジェクトは、バージョン2.3以降で廃止されました。最後のコミットは2016年に行われました。好奇心ones 盛な人のために、作者が彼の作品をアーカイブしたgithubにまだミラーがあります。注:pyclewnは、他のXavier Degayeの* clewnプロジェクトの進化における最終段階のステップでした。
  • 他のいくつかのデバッガーを統合するvim- debugger
  • notEvilのvim-debugは「pyclewnがいくつかの欠点を克服するための便利なレイヤー」として機能します

また、LLDB(LLVMプロジェクトから)を統合するプラグインもあります

ブラムは、現在(2017年9月)は、新規にvimのおかげで内からGDBの統合に取り組んでいるようだ:terminal機能。それを使用するには、(で)termdebugパケットをロードする必要があり:packadd termdebug、それからvimウィンドウでgdbコンソールを起動できます:TermDebug (+options)。IMOは、Vimの下でのGDB統合の未来であると考えることができます。


4
良い-これらの各プラグインの簡単な概要を教えてください。
ムル

1
?リンクはプラグインの公式ページです。はい、プラグインが消えたり、別の場所に移動したりすると、変更できます。その場合、前のSOで行ったように、最初のケースでメッセージを更新します。また、2番目のケースでは、プラグインが何を行うかを詳細に説明するメッセージの一部が非推奨になることを意味します。悪いケースのシナリオ:プラグインが実際に何をするのかを詳細に説明することは、それぞれの作者がプラグインの作成や機能の追加などを行っている間、時代遅れになります。とにかく。私は...来週それらの簡単な説明を追加します
リュックHermitte

2
@LucHermitte投稿はレビューキューに登場しました。私はこのメッセージの正確なテキストを自分で追加しませんでした、システムは私のためにそれをしました。いずれの場合でも、リンクのみの回答は、SOおよびすべてではないがほとんどのSEサイトで「不良」と見なされます。彼らが時代遅れになるかもしれないという理由だけでなく、彼らは物事を本当に説明していないからです。ほぼすべての質問は、右のドキュメントページ(複数可)にリンクすることにより、「答え」することができ地獄、あなたはソースコードにしてもリンクできますが、それはない実際に何かを説明しますか?それは本当に便利ですか?それは本当に誰かがVimを理解するのに役立つのでしょうか?
マーティントゥルノイ

1
「私はこのメッセージの正確なテキストを自分で追加しませんでした。システムは私のためにそれをしました」。OK。それはメッセージを説明しますが、私はそれをかなり奇妙に感じました。リンクについて。RTFM / SFTWに関するSO / SEポリシーを理解しています。他のフォーラムとは異なり、繰り返される/重複する質問は検出されると閉じられ、SO / SEはWikiアプローチに近づく傾向があります。
リュックエルミット

3
プラグインの検索場所について。ドキュメントを複製できました。しかし、それはあまり役に立ちません。さらに、プラグインが進化するにつれて答えを最新に保つことはほとんど不可能です。機能の最新でない短い要約を追加することは可能です、そして、私はそれにそれを見るでしょう。いずれにせよ、彼らの公式ページはエントリーポイントです。プラグインに関して、これは最初の重要な情報です。確かに、素敵なプレゼンテーションは私たちにとって魅力的です...プラグインが特定のケースで機能しないことがわかるまで、これはFSOSSでよく起こります。これは、利用可能なソリューションのリストも興味深いところです。
リュックエルミット

7

GDB editコマンド

次のコマンドを使用して、現在の行でエディターを開きます。

$EDITOR +<current-line> <current-file>

デフォルトeditorはですがex、形式vimも理解し+<current-line>ます。

エディターを終了すると、に戻りますgdb

これにより、ソースを自由に閲覧でき、ctags統合されている場合は特に強力です。

これは貧弱な人が組み込みのgdbからvimへの統合です。主な不足していることは、Vimからブレークポイントを設定することです。

edit そしてセンター

editデフォルトではソースの周りにVimを配置しないため、それを行うPythonスクリプトを作成しました:https : //stackoverflow.com/questions/43557405/how-to-open-the-current-file-at-the- gdb / 43557406#43557406からのテキストエディターの現在の行

クリップボードヘルパーへのブレークポイントコマンド

このvimコマンドは、タイプのブレークポイント指定子をコピーします。

b <file-path>:<line-number>

クリップボードへ:

command! Xg :let @+ = 'b ' . expand('%:p') . ':' . line('.')

次に、それをに貼り付けますgdb

これは、ブレークポイントの設定を容易にするためのgdb統合に対する貧弱な人のvimです。

参照:https : //stackoverflow.com/questions/3536600/do-you-debug-c-code-in-vim-how


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