Bagaimana saya bisa mengintegrasikan gdb dengan Vim?

52

Alih-alih gdbtuiatau di ctrl+xbawah gdbyang menunjukkan kode sumber di atas layar, saya ingin melihat ini di editor Vim saya yang akan melompat di antara tab, dan buffer sesuai.

Bagaimana saya bisa melakukan ini?

nama
sumber
Hanya untuk referensi saya menemukan plugin lldb @ github.com/gilligan/vim-lldb dan tangkapan layar terlihat menjanjikan.
nama
BTW, ada yang tahu sesuatu tentang windbg? Integrasi Vim bisa menjadi ide yang bagus. Meskipun, sebenarnya saya pikir ini tentang hampir semua perangkat lunak yang ada.
eyal karni

Jawaban:

33

Di antara semua plugin yang saya coba, saya menemukan ConqueGDB menjadi pendekatan terbaik. ConqueGDB menggunakan Conque Shell untuk menanamkan shell interaktif di dalam vim, yang digunakan oleh GDB.

Alur kerja dengan ConqueGDB terdiri tidak memasukkan perintah GDB pada terminal GDB, Anda menggunakan pintasan pada kode sumber vim. Tetapi Anda dapat terus menggunakan prompt GDB jika Anda ingin, untuk perintah lebih lanjut, atau gulir untuk melihat seluruh sesi debug.

Beberapa pemetaan default ConqueGDB, misalnya:

  • leaderr : Lari
  • leaderc : lanjutkan
  • leaders : langkah
  • leaderp : variabel cetak di bawah kursor

Perhatikan bagaimana garis kursor vim telah digunakan untuk mengeluarkan 'baris cetak' GDB, eksekusi kode saat ini di baris lain (14) dan ada breakpoint pada baris 10.

vim dengan CongueGDB

Untuk menginstal dengan Vundle misalnya:

Plugin 'vim-scripts/Conque-GDB'

Saya menggunakan opsi plugin ini:

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  
viccuad
sumber
apa leaderartinya
In78
@ In78 Ini berarti kunci <kbd> \ </kbd> pada kebanyakan komputer. Misalnya <leader>rberarti <kbd> \ </kbd> + <kbd> r </kbd> di komputer saya. Vim manual memiliki entri untuk itu::help leader
Parsa
Tak ketinggalan pemetaan default ConqueGDB ini: <Leader>b. Ini menetapkan breakpoint pada posisi kursor. Namun, ini BUKAN beralih, jadi Anda tidak dapat menggunakannya untuk menghapusnya lagi. Sebaliknya, Anda harus menulis 'jelas' pada prompt GDB.
serup
Saya telah mencoba menggunakan ConqueGdb ini dan untuk membuatnya berfungsi, pertama-tama saya harus menentukan file yang dapat dieksekusi - dan kadang-kadang gagal dengan pengaturan brakepoints - saya harus memfokuskan jendela gdb dan tekan I untuk memasukkan, sebelum breakpoint akan muncul - apakah ini normal untuk ConqueGdb?
serup
11

Anda memiliki beberapa plugin yang mengintegrasikan gdb.

  • Kami dulu punya pyclewn . The proyek telah dihentikan setelah versi 2.3. Komit terakhir telah dibuat pada 2016. Untuk yang penasaran masih ada cermin di github di mana penulisnya telah mengarsipkan karyanya. Catatan: pyclewn digunakan untuk menjadi langkah tahap terakhir dalam evolusi proyek clewn * Xavier Degaye lainnya.
  • vim-debugger , yang mengintegrasikan beberapa debugger lainnya
  • notEvil's vim-debug , yang bertindak sebagai "lapisan kenyamanan bagi pyclewn untuk mengatasi beberapa kekurangan"

Dan ada juga plugin yang mengintegrasikan lldb (dari proyek LLVM)

Tampaknya Bram saat ini (september 2017) bekerja pada integrasi gdb dari dalam vim berkat :terminalfitur baru . Untuk menggunakannya, kita perlu memuat termdebugpaket (dengan :packadd termdebug), maka kita akan dapat memulai konsol gdb di jendela vim :TermDebug (+options). IMO, kita dapat menganggapnya sebagai masa depan integrasi GDB di bawah Vim.

Luc Hermitte
sumber
4
Bagus - dapatkah Anda memberikan gambaran singkat tentang masing-masing plugin ini?
muru
1
?? Tautan ke halaman resmi plugin. Ya mereka dapat berubah jika plugin hilang atau jika mereka dipindahkan ke tempat lain. Dalam hal ini, saya akan memperbarui pesan dalam kasus pertama seperti yang saya lakukan sebelumnya pada SO. Dan dalam kasus kedua, itu berarti bagian dari pesan apa pun yang merinci apa yang dilakukan plugin akan menjadi usang. Skenario kasus yang lebih buruk: merinci apa yang sebenarnya dilakukan plugin akan menjadi usang sementara masing-masing penulis mengerjakannya, menambah fitur, dan sebagainya. Bagaimanapun caranya. Saya akan menambahkan deskripsi singkat tentang mereka minggu depan ...
Luc Hermitte
2
@LucHermitte Posting muncul di antrian ulasan; Saya sendiri tidak menambahkan teks yang tepat dari pesan ini, sistem melakukannya untuk saya. Bagaimanapun, tautan hanya jawaban yang dianggap "buruk" pada SO dan sebagian besar, jika tidak semua, situs SE. Bukan hanya karena mereka ketinggalan zaman, tetapi juga karena mereka tidak benar-benar menjelaskan banyak hal; hampir semua pertanyaan dapat "dijawab" dengan menautkan ke halaman dokumentasi yang tepat, sial, Anda bahkan dapat menautkan ke kode sumber, tetapi apakah itu benar - benar menjelaskan sesuatu? Apakah itu benar - benar bermanfaat? Apakah itu benar - benar berkontribusi pada pemahaman seseorang tentang Vim?
Martin Tournoij
1
"Saya sendiri tidak menambahkan teks pesan ini, sistem melakukan itu untuk saya" . BAIK. Itu menjelaskan pesannya, yang menurut saya cukup aneh. Mengenai tautan. Saya mengerti kebijakan SO / SE tentang RTFM / SFTW. Tidak seperti forum lain, pertanyaan berulang / rangkap ditutup ketika terdeteksi, dan SO / SE cenderung lebih ke arah pendekatan wiki.
Luc Hermitte
3
Mengenai tempat mencari plugin. Saya bisa menggandakan dokumentasi mereka. Tapi itu tidak akan banyak membantu. Selain itu, hampir tidak mungkin untuk tetap memperbarui jawabannya ketika plugin berevolusi. Menambahkan ringkasan singkat yang tidak terkini tentang fitur dimungkinkan, dan saya akan melihatnya. Bagaimanapun, halaman resmi mereka adalah titik masuk. Mengenai plugin, ini adalah informasi penting pertama. Memang, presentasi yang bagus dapat menarik bagi kami ... Sampai kami mengetahui plugin tidak dapat berfungsi dalam kasus khusus kami - yang sering terjadi pada FSOSS. Di sinilah daftar solusi yang tersedia juga menarik.
Luc Hermitte
7

editPerintah GDB

Buka editor di baris saat ini menggunakan perintah:

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

Standarnya editoradalah ex, tetapi vimjuga memahami +<current-line>formatnya.

Ketika Anda keluar dari editor, Anda kembali ke gdb.

Ini memungkinkan Anda untuk menelusuri sumber secara bebas dan sangat kuat jika Anda memiliki ctagsintegrasi.

Ini adalah built-in one way gdb to vim integrasi orang miskin: hal utama yang hilang adalah pengaturan breakpoints dari Vim.

edit dan pusat

edittidak memusatkan Vim secara default di sekitar sumber, jadi saya telah membuat skrip Python yang melakukannya: https://stackoverflow.com/questions/43557405/how-to-open-the-current-file-at-the- current-line-in-a-text-editor-from-gdb / 43557406 # 43557406

Perintah breakpoint untuk bantuan clipboard

Perintah vim ini menyalin penentu breakpoint tipe:

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

ke clipboard:

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

Maka Anda bisa menempelkannya ke gdb.

Ini adalah vim orang miskin untuk integrasi gdb untuk memudahkan pengaturan breakpoints.

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

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
sumber
3

Meskipun secara teknis tidak vim. cgdb adalah versi kutukan dari gdb dengan keybindings mirip vim. Sudah debugger goto saya selama bertahun-tahun:

https://cgdb.github.io/

ericcurtin
sumber