Gdb'yi Vim ile nasıl entegre edebilirim?


52

Bunun yerine ekranın üstünde kaynak kodunu gösteren gdbtuiveya ctrl+xaltında gdbgösteren kodları Vim editörümde sekmeler ve tamponlar arasında atlayacağımı görmek istiyorum.

Bunu nasıl yapabilirim?


Sadece referans için lldb eklentisi @ github.com/gilligan/vim-lldb bulundu ve ekran görüntüleri umut verici görünüyor.
adı

Btw, kimse windbg hakkında bir şeyler biliyor mu? Vim entegrasyonu iyi bir fikir olabilirdi. Yine de, aslında var olan hemen hemen her yazılım hakkında düşünüyorum.
eyal karni 1

Yanıtlar:


33

Çalıştığım tüm eklentiler arasında ConqueGDB'yi en iyi yaklaşım olarak buldum . ConqueGDB, GDB tarafından kullanılan vim içerisine etkileşimli bir kabuk yerleştirmek için Conque Kabuğunu kullanır .

ConqueGDB ile iş akışı, GDB terminaline GDB komutları girmemekten ibarettir, siz vim kaynak kodunda kısayollar kullanırsınız. Ancak, daha gelişmiş komutlar için isterseniz GDB komut istemini kullanmaya devam edebilir veya tüm hata ayıklama oturumunu görmek için kaydırma yapabilirsiniz.

Bazı ConqueGDB varsayılan eşlemeleri, örneğin:

  • leaderr : Çalıştırmak
  • leaderc : devam et
  • leaders : adım
  • leaderp : imleç altında baskı değişkeni

Vim imleç satırının GDB 'yazdırma satırı' vermek için nasıl kullanıldığına dikkat edin, kodun mevcut yürütülmesi başka bir satırda (14) ve satır 10'da bir kesme noktası var.

CongueGDB ile vim

Örneğin Vundle ile kurmak için:

Plugin 'vim-scripts/Conque-GDB'

Bu eklenti seçeneklerini kullanıyorum:

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  

ne leaderdemek
In78 mart

@ In78 Çoğu bilgisayarda <kbd> \ </kbd> anahtarı anlamına gelir. Örneğin <leader>r, bilgisayarlarımda <kbd> \ </kbd> + <kbd> r </kbd> anlamına gelir. Vim manual bunun için bir giriş yaptı::help leader
Parsa

Bu ConqueGDB varsayılan eşleme unutmamak gerekir: <Leader>b. İmleç konumunda bir kesme noktası belirler. Ancak, bir geçiş DEĞİLDİR, bu nedenle tekrar kaldırmak için kullanamazsınız. Aksine, GDB isteminde 'net' yazmanız gerekecektir.
serup

Bu ConqueGdb'yi kullanmayı denedim ve çalışması için önce çalıştırılabilir bir dosya belirttim - ve bazen fren noktalarının ayarlanması ile başarısız oluyor - kesme noktası görünmeden önce gdb penceresine odaklanmalı ve eklemek için I düğmesine basmalıyım - bu ConqueGdb için normal?
Kasım’da

11

Gdb'yi bütünleyen birçok eklentiniz var.

  • Eskiden bilinirdik . Proje durduruldu sürüm 2.3 sonra. Son söz 2016 yılında yapıldı. Meraklı olanlar için yazarının çalışmalarını arşivlediği github'da hala bir ayna var . Not: Pyclewn, diğer Xavier Degaye's * clewn projelerinin evriminde son aşama olanıydı.
  • diğer birkaç hata ayıklayıcısını birleştiren vim- debugger
  • notEvil'in "bazı dezavantajların üstesinden gelmek için halk için uygun bir katman" görevi gören vim-debug

Ayrıca, lldb'yi bütünleştiren bir eklenti var (LLVM projesinden)

Bram, şu anda (Eylül 2017), yeni :terminalözellik sayesinde gdb'nin vim içinden entegrasyonunda çalışıyor . Kullanmak için, termdebugpaketi (with :packadd termdebug) yüklememiz gerekir , sonra vim penceresinde bir gdb konsolu başlatabiliriz :TermDebug (+options). IMO, Vim kapsamında GDB entegrasyonunun geleceği olarak düşünebiliriz.


4
İyi - bu eklentilerin her birine kısa bir genel bakış verebilir misiniz?
muru

1
?? Linkler, eklentilerin resmi sayfalarına. Evet, eklentiler kaybolursa veya başka bir yere taşınırsa değişebilirler. Bu durumda, önce SO'da yaptığım gibi ilk durumda mesajı güncelleyeceğim. İkinci durumda ise, eklentinin ne yaptığını ayrıntılandıran herhangi bir mesajın bir kısmının kullanımdan kaldırılacağı anlamına gelir. Daha kötü durum senaryosu: Eklentinin gerçekte ne yaptığını detaylandırmak, yazarları üzerinde çalışırken, özellikler eklerken vb. Eskimiş olacaktır. Herhangi bir şekilde. Gelecek hafta onlarla ilgili kısa bir açıklama ekleyeceğim ...
Luc Hermitte

2
@ LucHermitte Gönderi inceleme kuyruğunda geldi; Bu mesajın tam metnini kendim eklemedim, sistem bunu benim için yaptı. Her durumda, link yalnızca SO’da “kötü” olarak kabul edilir ve çoğu olmasa da, SE siteleri. Sadece güncel olmadıkları için değil, aynı zamanda gerçekten bir şeyler açıklamadıkları için ; hemen hemen her soru doğru dökümantasyon sayfasına / sayfalarına bağlanarak "cevaplanabilir", cehennem, hatta kaynak koduna bile bağlayabilirsiniz, ama bu gerçekten bir şeyi açıklıyor mu? Bu gerçekten işe yarar mı? Bu gerçekten birinin Vim anlayışına katkıda bulunuyor mu?
Martin Tournoij

1
"Bu mesajın tam metnini kendim eklemedim, sistem bunu benim için yaptı" . TAMAM. Bu oldukça garip bulduğum mesajı açıklıyor. Bağlantılarla ilgili olarak. RTFM / SFTW ile ilgili SO / SE politikasını anlıyorum. Diğer forumların aksine, tekrarlanan / yinelenen sorular tespit edildiğinde kapanır ve SO / SE wiki yaklaşımına daha fazla eğilim gösterir.
Luc Hermitte

3
Eklentileri nerede bulacağınızla ilgili olarak. Dokümanlarını çoğaltabilirim. Ama fazla yardımcı olmuyor. Ayrıca, eklentiler geliştikçe yanıtı güncel tutmak neredeyse imkansızdır. Özelliklerin güncel olmayan kısa bir özetinin eklenmesi mümkündür ve göreceğim. Her durumda, resmi sayfaları giriş noktasıdır. Eklentilerle ilgili olarak, bu ilk önemli bilgidir. Gerçekten güzel bir sunum bize çekici gelebilir ... Eklentinin belirli bir durumda işe yaramayacağını bulana kadar - ki bu FSOSS ile sık sık olur. Bu, mevcut çözümlerin bir listesinin de ilginç olduğu yerdir.
Luc Hermitte

7

GDB editkomutu

Komutu kullanarak geçerli satırda bir editör açar:

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

Varsayılan editorolduğunu ex, ancak vimaynı zamanda anlar +<current-line>biçimi.

Editörden çıktığınızda tekrar girersiniz gdb.

Bu, kaynağa serbestçe göz atmanızı sağlar ve ctagsentegrasyonunuz varsa özellikle güçlüdür .

Bu, fakir bir insanın yerleşik bir şekilde gdb'yi vim entegrasyonuna çeviriyor: ana eksiklik, kesme noktalarını Vim'den ayarlamak.

edit ve merkez

editVim'i kaynak çevresinde varsayılan olarak merkezlemediğinden, bunu yapan bir Python betiği oluşturdum: https://stackoverflow.com/questions/43557405/how-to-open-the-current-file-at-the- geçerli-line-in-a-metin-editörü-den-gdb / 43557406 # 43557406

Pano yardımcısına Breakpoint komutu

Bu vim komutu, aşağıdaki türden bir kesme noktasını kopyalar:

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

panoya:

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

O zaman bunu sadece yapıştırabilirsiniz gdb.

Bu, yoksul bir erkeğin sınır değerleri belirlemeyi kolaylaştırmak için gdb entegrasyonuna yönelik vim.

Ayrıca bakınız: https://stackoverflow.com/questions/3536600/do-you-debug-c-code-in-vim-how


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.