C ++ kodu Vim'de hata ayıklıyor musunuz? Nasıl?


152

Soru, Vim'i C ++ uygulamaları geliştirmek için kullanan tüm insanlar içindir.

Hayatımda 'Vim'den nefret ediyorum !!!' olarak tanımlanabilecek bir dönem vardı. 'Vim güzel!'

Ancak, çoğunlukla Microsoft geliştirme IDE'lerinde büyüdükten sonra, bunlara alıştım F5- F11kod hata ayıklarken kısayollar, izleme penceresi, çağrı yığını ve ana kod - hepsi herhangi bir GDB komutu yazmanıza gerek kalmadan görünür.

İşte soru şu:

Hata ayıklamak için de Vim kullanıyor musunuz? Yoksa bu amaçla bir IDE'ye mi geçiyorsunuz? Hangisi?

Kod hatalarını ayıklamak için Vim'i kullananlar için: düzenleyicide kesme noktalarını ayarlamak, şu anda hata ayıkladığımız satırı vurgulamak, adım sırasında otomatik gezinmek, adım atmak, adım atmak için eklentiler var mı?

Lütfen, bana GDB'yi komut satırı olarak kullandığınızı söyleme, hata ayıklanan yalnızca bir satıra vb. Bakın.


1
Eminim hala "ed" ile gelişen ve hata ayıklayan insanlar bulabilirsiniz.
e2-e4

55
Aman tanrım, onlar "C ++ kod plz hata ayıklama" sorulara cevap, ama çok lokalize gibi ... bu çok saçma kapatın !
P

17
Deneyin gdb -tui.
Jayesh

1
Vim'de takılıp kaldınız veya Emacs gibi büyük gdb entegrasyonuna sahip diğer editörlere bakmak ister misiniz? GDB ile ilgili temel sorun, varsayılan olarak tek satır çıktı mı yoksa sürekli olarak hangi gdb -tui'nin yardımcı olduğu l (ist) yazılmasını önlemek mi?
jla

1
Superset: stackoverflow.com/questions/4237817/configuring-vim-for-c Ama sınıf farkındalığı için Eclipse ile Vim tuş bağlarını kullanmanızı tavsiye ediyorum.
Ciro Santilli 法轮功 冠状 病 六四 事件 法轮功

Yanıtlar:


76

Diğer cevapların aksine, sadece ihtiyacınız olanı yapan en az üç seçenek vardır: clewn , pyclewn ve vimgdb .

Her üç proje de birbiriyle ilişkilidir. vimgdb , Vim'e karşı bir yamadır ve Vim'in yeniden derlenmesini gerektirir. clewn , Netbeans soket arayüzü üzerinden Vim ile iletişim kuran bağımsız bir programdır. Bu, Vim +netbeansseçeneğiyle inşa edilmesini gerektirir (bu, son Linux dağıtımlarında olduğu için sorun olmamalıdır).

Clew'ın web sitesinden alıntı yapmak için:

Clewn vim editöründe tam gdb desteği uygular: kesme noktaları, izleme değişkenleri, gdb komutunun tamamlanması, montaj pencereleri, vb.

Bence kesinlikle bir şans vermelisin.

Pyclewn web sitesinin ana sayfası, üç proje arasında bir karşılaştırma göstermektedir.

Birkaç ay önce pyclewn'ı denedim. Kurulumu biraz zordu, ama dışarı ve umut verici olsa iyi görünüyor. Sadece bazı testler yaptım ve bir grafik hata ayıklayıcıdan bekleyebileceğiniz olağan şeyleri vb. Koşullu nedenlerle kullanmıyorum ama başka bir denemeye hevesliyim.


6
Conque GDB güzel bir alternatif. Kurulumu kolay, basit ve çok güçlü.
Druesukker

@UncleZeiv vimgdb eski. Burada bir güncelleme yapılması gerektiğini ifade ettim: github.com/larrupingpig/vimgdb-for-vim7.4/issues/4
hlin117

@ Druesukker, cevabınız resmi bir cevabı hak ediyor!
solotim

@UncleZeiv vimgdb ile bağlantınız yok. Bu gitmelidir github.com/larrupingpig/vimgdb-for-vim7.4 , sanırım
mcepl

2
Sadece GDB tabanlı bir vim "gibi" hata ayıklayıcı eklemek için - cgdb.github.io
Jimmy MG Lim

24

Vim, Mayıs 2018'de yayınlanan 8.1 sürümüne resmi olarak yerleşik bir hata ayıklayıcı ekledi. Bu özellik, Ağustos 2017 gibi erken sürüm 8.0 sürümlerinde de mevcuttu.

Aşağıdaki vim komutları eklentiyi yükler ve hata ayıklayıcıyı başlatır.

:packadd termdebug
:Termdebug

İkinci komut, bir programı isteğe bağlı bir bağımsız değişken olarak alır veya alternatif olarak komutla gdbbirlikte pencereden bir program yüklenebilir file.

Eklenti yüklendiğinde, gdbilgili pencerede etkileşimli olarak kullanılabilir. Örneğin kesme noktaları ayarlanabilir, kodlar atlanabilir ve değişkenler incelenebilir.

Etkileşim için Vim komutları verilebilir gdb. Bazı alakalı komutları içerir :Step, :Over, :Finish, :Continue, :Stop, :Break, :Clear, ve :Evaluate.

Ayrıca, etkileşim için düzenleyici penceresinin üstünde tıklanabilir düğmeler vardır gdb.

Editör penceresi, hata ayıklama durumunu yansıtacak şekilde güncellenir. Kesme noktaları ile gösterilir >>ve geçerli satır vurgulanır.

Yerleşik yardım sayfası ayrıntılı belgeler içerir.

:help terminal-debug

Geçenlerde örnek bir oturumda yürüyen bir blog yazısı yazdım.

https://www.dannyadam.com/blog/2019/05/debugging-in-vim/


14

Vim güzel bir editör, ama hata ayıklama yapmak için bir hata ayıklayıcı kullanıyorum (GDB gibi).

Ancak GDB'yi metin modunda kullanmak zorunda değilsiniz; KDbg , DDD veya Insight gibi bir grafik ön uç kullanabilirsiniz .

GDB'yi Vim'e almanın yolları vardır (ancak daha sonra metin tabanlı hata ayıklama elde edersiniz).


10

GDB editkomutu

Şu komutu kullanarak geçerli satırda bir düzenleyici 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 içeri girersiniz gdb.

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

Bu, fakir bir adamın yerleşik bir şekilde gdb'den vim entegrasyonudur: ana eksik şey Vim'den kesme noktaları ayarlamaktır.

edit ve merkez

editVim'i kaynak çevresinde varsayılan olarak ortalamaz, bu yüzden bunu yapan bir Python betiği oluşturdum: Geçerli dosyayı geçerli satırda GDB'den bir metin düzenleyicide nasıl açabilirim?

Pano yardımcısına kesme noktası komutu

Bu vim komutu, tür bir kesme noktası belirtecini kopyalar:

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

panoya:

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

Sonra bunu içine yapıştırabilirsiniz gdb.

Bu, kesme noktalarını ayarlamayı kolaylaştırmak için fakir bir adamın gdb entegrasyonu vim'sidir.

GDB Gösterge Tablosu

https://github.com/cyrus-and/gdb-dashboard

Bunun Vim ile ilgisi yoktur, ancak çok şey başaran ve orada diğer Vimmer'lere uygun olabilecek hafif bir çözümdür.

Diğerleri GDB TUI'den bahsetti, ancak onu çok kırılmış ve katlanılabilir olacak kadar güçlü değil buldum.

Bunun yerine GDB Dashboard gibi Python API tabanlı çözümlere geçtim.

Ben daha ayrıntılı olarak kullanılan ve mantık açıkladı: kod ile gdb bölünmüş görünüm

İşte size verdiklerinin bir ekran görüntüsü:

resim açıklamasını buraya girin

Ayrıca bakınız: /vi/2046/how-can-i-integrate-gdb-with-vim

Vazgeç ve gerçek bir IDE kullan

Tüm bunlarla birlikte, bu, ben de dahil olmak üzere çoğu insan için en iyi çözümdür. Çoğu kişi, birkaç farklı eklentiyi kendileri seçip yüklemeden C ++ sınıfında bilinçli bir şekilde tanımları atlayabilir ve adım hata ayıklama işlemlerini içerirse, tonlarca zaman kazanacaktır. 2020 itibariyle benim için en kötü olan Eclipse idi: https://www.slant.co/topics/1411/~best-ides-for-c-on-linux


4

Kaynak düzeyinde bir hata ayıklayıcı kullanmak, hatalı program davranışını teşhis etmenin birçok yolundan sadece biridir ve bunu yapmak çok kolay olmasına rağmen nadiren kendimi başlatırken buluyorum.

Yani benim için, bir hata ayıklayıcı da olan bir metin editörü kullanmanın doğal bir avantajı yok . Bunun yerine, kullanmayı tercih ettiğim hata ayıklayıcıdan bağımsız olarak tercih ettiğim metin düzenleyicisini kullanıyorum. Şu anda bu amaçlar için çoğunlukla gedit ve kdbg kullanıyorum, ancak bu seçimler zamanla bağımsız olarak gelişiyor.


1
Bir kde / gnome-free geliştirme ana bilgisayarında uzaktan geliştirmediğiniz sürece.
user826955

3

Güncelleme 2020: Hata Ayıklama Bağdaştırıcı Protokolü'nü kullanan yeni bir eklenti vimspector var

  1. Eklentiyi yükleyin https://github.com/puremourning/vimspector#installation

  2. Yapılandır (yaz .vimspector.json)

  3. Hata ayıklama simgesiyle derleyin g++ cpp.cpp -ggdb -o cpp

  4. F4Hata ayıklamayı başlatmak için basın

resim açıklamasını buraya girin

  • Not benim .vimspector.jsonana dizindeki (yani herhangi bir alt dizinde çalışmak)
{
"configurations": {
  "Python - Launch": {
    "adapter": "vscode-python",
    "configuration": {
      "name": "Python: Launch current file",
      "type": "python",
      "request": "launch",
      "stopOnEntry": true,
      "stopAtEntry": true,
      "console": "externalTerminal",
      "debugOptions": [],
      "cwd": "${cwd}",
      "program": "${file}"
    }
  },
  "Perl - Launch": {
    "adapter": "vscode-perl-debug",
    "configuration": {
      "name": "Perl: Launch current file",
      "type": "perl",
      "request": "launch",
      "exec": "/usr/bin/env perl",
      "execArgs": [],
      "stopOnEntry": true,
      "stopAtEntry": true,
      "console": "externalTerminal",
      "sessions": "single",
      "debugOptions": [],
      "cwd": "${cwd}",
      "program": "${file}"
    }
  },
  "C - Launch": {
    "adapter": "vscode-cpptools",
    "configuration": {
      "name": "Cpp: Launch current file",
      "type": "cppdbg",
      "request": "launch",
      "externalConsole": true,
      "logging": {
        "engineLogging": true
      },
      "stopOnEntry": true,
      "stopAtEntry": true,
      "debugOptions": [],
      "MIMode": "gdb",
      "cwd": "${cwd}",
      "program": "${fileDirname}/${fileBasenameNoExtension}"
    }
  },
  "Java - Launch": {
    "adapter": "vscode-java",
    "configuration": {
      "name": "Java: Launch current file",
      "request": "launch",
      "mainClass": "com.vimspector.test.TestApplication",
      "sourcePaths": [ "${workspaceRoot}/src/main/java" ],
      "classPaths": [ "${workspaceRoot}/target/classes" ],
      "args": "hello world!",
      "stopOnEntry": true,
      "console": "integratedTerminal"
    }
  }
} }

1

Kısa bir süre önce bir uygulama üzerinde çalıştığı kutuda yer almasını gerektiren uzun bir süre boyunca bir uygulama üzerinde çalıştıktan sonra (cihaz kurulumu), vim'de kod yazdım, otomatikleştiren komut dosyaları vardı, bir sunucuya itti , orada bir komut dosyası vardı sentinel dosyasını ikililerle birlikte itti fark ettim. Bu daha sonra kutudaki uygun hizmetleri yeniden başlatır ve başka bir ssh penceresinde tail -fgünlük dosyamda çalışıyordum.

Uzun lafın kısası, hiç hata ayıklayıcı kullanmadım. Beklenmedik bir şekilde ölecek bir şeyim olsaydı, sadece kayıt seviyelerini yükseltir, yeniden yapardım ve ölmeden önce kaydedilen son şeyin ne olduğunu görürdüm, sonra onu analiz eder ve sorunu düzeltirdim.

Güzel bir şey, bir şey bir müşteri ortamında sorun olduğunda, sadece bir hata ayıklama düzeyi günlüğü isteyecekti ve sunucusuna erişmeye bile gerek kalmadan sorunu tanımlayabiliyordum.

... ama evet, hata ayıklayıcı olmanın güzel olacağı zamanlar oldu.


0

Sadece yukarıdakilere eklemek için:

IMO vim oldukça hafif bir editör olma eğilimindedir ve hata ayıklama ağırlığa katkıda bulunur. Bunu yapmanın yolları vardır, yani vim7.4 + kullanarak

:terminal

ve aşağıdaki komut satırı (lanetler) hata ayıklayıcılarından birini çalıştırma. Hiç bilmediğiniz IDE'ler için varsayılan olarak birkaçı kullanılır. yani lldb = xcode.

açıkçası daha fazla cli tabanlı olanlar var; @ all önermek ve listeye eklemek için çekinmeyin. Teşekkürler!

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.