Herhangi bir golang etkileşimli hata ayıklayıcı var mı? [kapalı]


85

Başlık hemen hemen özetliyor. Go'yu deniyorum ve interaktif bir ortamda istediğim kadar kesme noktaları belirleyebilmeyi ve adım atmayı / üstünü / çıkmayı gerçekten özlüyorum. Go'da hata ayıklamak için gdb'yi kullanabileceğimi biliyorum, ancak bu, kesme noktası için gdb'ye bağlanabilen bir IDE kullanmaya kıyasla oldukça can sıkıcı.

Birini aramayı denedim ve yalnızca sözdizimi vurgulaması olan ancak hata ayıklaması olmayan eklentileri veya küçük IDE'leri bulabildim.


Bu soruya gelen başka birine, yalnızca GDB ile ilgili (şu anda kabul edilmiş olan) değil, diğer yanıtları kontrol ettiğinizden emin olun
Leigh

Yanıtlar:


38

Güncelleme : Şahsen, GDB çalışırken, onu Go'da kullanmanın hayranı değilim ve biraz kan tüküreceksin. İyi alternatifler için diğer cevaplardan bazılarına göz atın.


Evet tabi ki :)

Go'da bir hata ayıklayıcı (GDB) var

İşte nasıl kullanılacağına dair resmi eğitim .

Eğer 'grafiksel hata ayıklama' istiyorsanız (yani düzenleyicide kesme noktaları ayarlamak), bazı IDE'ler bunu yapmanıza izin verir (arka planda GDB ile).

Spesifik olarak, Eclipse, LiteIDE ve Zeus, kodlama ortamınızdan (kaynak) kesme noktaları belirlemenize ve hata ayıklamanıza izin verir . İşte Zeus ile nasıl yapılacağına dair bir video .


2
Bir takip olarak bir mac kullanıyorum ve geliştirmeyi çok güzel ve kolay hale getirmek için IntelliJ go eklentisini buldum, ancak LiteIDE hata ayıklamada gerçekten harika (mükemmel olmasa da çok iyi çalışıyor). Çalışması için güncellenmiş bir GDB kurmam gerekiyordu ki bu biraz acı vericiydi.
Daniel Williams

4
Pek

Hareket halindeki GDB, yıllar önce bozuldu ve artık işlevsel değil. Kabul edilen yanıt tamamen YANLIŞ.
Michele Giuseppe Fadda

@ user4839438 uhh, ilk iki satır tam anlamıyla "hareket halindeyken gdb kullanma" dır. Ben şahsen kullandım godebug, son gittiğimde oldukça güzeldi
Benjamin Gruenbaum

Haklısınız, ancak başlıkta "Go'da bir hata ayıklayıcı (gdb) var" yazıyor , bu artık doğru değil ve şu anda bir kötü hizmet. GDB eskiden golang'ın eski versiyonlarıyla çalışırdı, onu çalıştırmaya çalışmak büyük bir pideydi ve sonunda işe yaramadı ve muhtemelen çalışamazdı. Dwelve ile mutlu bir köpek yavrusuyum, ben de godebug'ı deneyeceğim .
Michele Giuseppe Fadda

29

Go için GDB desteğinde, go ekibi tarafından düzeltilemeyecek birçok sorun var.

Daha fazla bilgi için Rob Pike tarafından yazılan yazıyı okuyun :

Temel gdb işlevselliğini (yığın izleri, yazdırma değerleri) desteklenen platformlarda çalışmaya devam ettirecek olsak da, bir Go programının tüm ortamını anlamak için hata ayıklayıcıyı kullanma yeteneği muhtemelen hiçbir zaman işe yaramayacaktır ve gdb desteğini iyileştirmek ekip için bir öncelik değildir. .

Başka hata ayıklama seçenekleri arıyorlar ama şimdiye kadar somut planları yok. Dokümantasyon eski ve runtime-gdb.pygo 1.2 ile gelen komut dosyası python3 desteği ile derlenmiş bir GDB için çalışmıyor (örneğin şu anki Ubuntu).


25
Bu, şimdi benimsenmeye başlayan bir dil için güven verici değil
Valerio

2
@ ValerioColtrè Hareket halindeyken bir hata ayıklayıcıya asla ihtiyacım olmadı. birim testleri ve Printf ("% # v", ...) şimdiye kadar bana iyi hizmet etti ...
metakeule

20
@metakeule Kimsenin bir hata ayıklayıcıya ihtiyacı yoktur, ancak iyi bir hata ayıklayıcı, özellikle başarısız testlerde hata ayıklamada inanılmaz derecede yardımcı ve daha verimli olabilir. Ayrıca, hata ayıklayıcılar kodunuzu değiştirmezken, yazdırma ifadeleri değiştirir.
gotgenes

GDB belgelerinden: "GDB, Go programlarını iyi anlamıyor. Yığın yönetimi, iş parçacığı ve çalışma zamanı, yürütme modelinden yeterince farklı yönler içeriyor GDB, program gccgo ile derlendiğinde bile hata ayıklayıcıyı karıştırabileceklerini umuyor. bir sonuç, GDB bazı durumlarda yararlı olabilse de, Go programları için, özellikle de yoğun şekilde eşzamanlı olanlar için güvenilir bir hata ayıklayıcı değildir "
masukomi

Go hata ayıklayıcılarla nasıl çalışır? "Bir süredir özel bir Go hata ayıklayıcı hakkında konuştuk, ancak henüz bir tane yok." yazan Russ Cox
Ivan Chau

24

2017 Güncellemesi: Aşağıda bahsedilen Godebug projesinin yerini artık resmi olarak derekparker / delve aldı .


Orijinal cevap:

Artık (Mart 2015), kodu alet etmeye dayalı başka bir yaklaşımınız var.

mailgun / godebug :

godebugprogramınızı hata ayıklama çağrılarıyla donatmak için kaynak kodu oluşturmayı kullanır .
go tool coverkod kapsamına benzer bir yaklaşım benimser.

  • Koştuğun zaman godebug , programınızı, araçlar işlev çağrılarını, değişken bildirimleri ve ifade satırlarını ayrıştırır ve ortaya çıkan kodu bir yere (şu anda stdout veya orijinal dosyalarınızın üzerinde) çıkarır.
  • Bu değiştirilmiş kodu çalıştırdığınızda, bir yere bir kesme noktası koyduğunuzu varsayarak, içinden geçebilir ve değişkenleri inceleyebilirsiniz.

Daha sonra: keyfi Go ifadelerini değerlendirin ve değişkenlere yazın.


Güncelleme Haziran 2015:

"Bazılarının" umduğu kadar etkileşimli olmasa da, yine de takdir edilmektedir (ve "adım atma" özelliğine sahiptir ).
Bkz. " Go'nun bir hata ayıklayıcısı var ve bu harika! " (Cloudfare)

İşte harika bir şey: ptracetaşınabilir olmayacak yarım düzine farklı arayüzle güreşmek yerine, godebugkaynak kodunuzu yeniden yazar ve godebug.Lineher satırda olduğu gibi godebug.Declare, her değişken bildiriminde ve godebug.SetTracekesme noktaları için (yani nereye yazarsanız yazın _ = "breakpoint") işlev çağrılarını enjekte eder .

Bu çözümü harika buluyorum.
Bundan çıkardığınız şey (muhtemelen çapraz derlenmiş) hata ayıklama etkin bir ikili dosyadır ve normal bir ikili dosyada yaptığınız gibi bir aşamalandırma sunucusuna bırakabilirsiniz .

Bir kesme noktasına ulaşıldığında, program satır içi durur ve sizi stdin'de bekler.

Go'nun tek ikili, sıfır bağımlılık felsefesi, hata ayıklamaya uygulanmış sevdiğimiz şey. Sunucuda araçlara veya izinlere gerek kalmadan her yerde derlenir, her yerde çalışır.

ifdef GODEBUG  
    GOPATH="${PWD}" go install github.com/mailgun/godebug
    GOPATH="${PWD}" ./bin/godebug build -instrument "${GODEBUG}" -o bin/rrdns rrdns

Hata ayıklama sadece bir make bin/rrdns GODEBUG=rrdns/...uzakta.


Godebug artık kullanımdan kaldırıldı ve onun yerine Delve kullanılmasını öneriyorlar
Alexandro de Oliveira

@AlexandrodeOliveira Teşekkürler. Cevabı buna göre güncelledim.
VonC

Araştırmayı denemek oldukça iyi çalışıyor gibi görünüyor. Bana öyle geliyor ki, iyi bir açık kaynak kodlu aracın bu cevabı soruyu daha az "konu dışı" yapıyor. Kapalı araçları derecelendirmek istemiyorum. Belki sorunun yeniden gözden geçirilmesi gerekiyor, ancak bulduktan sonra gdb'ye alternatifler ararken (gdb) gerçekten gitmek için tavsiye edilmediğini duydum.
Gerry Gleason

15

GÜNCELLEME:

Kontrol ettim ve Sürüm: 2016.1.3, Yapı: 145.1617.8, Çıkış: 5 Haziran 2016'nın Delve ile çalıştığını bildirmekten memnuniyet duyuyorum! Buradan indirebilirsiniz: https://www.jetbrains.com/idea/download/ . Ayrıca buradaki Delve kurulum talimatlarını da izleyin: https://github.com/derekparker/delve/tree/master/Documentation/installation

Biraz çatlak. OSX oturum açma istemini aldıktan hemen sonra etkileşimli hata ayıklama çalışmaya başladı. Bazen, başlatmak için basit bir .go programında hata ayıklamam gerekiyor. Ancak işe yarıyor ve Go için gördüğüm en iyi etkileşimli hata ayıklama deneyimi.

ORİJİNAL YAYIN:

Herhangi bir golang etkileşimli hata ayıklayıcı var mı? Evet.

Kullanmaya değer herhangi bir golang etkileşimli hata ayıklayıcı var mı? Hayır.

Mac'te GDB'yi yapılandırmak sıkıcı ama yapılabilir.

Ancak, kullanmaya başladığınızda, yüklemek için zamanınızı boşa harcadığınızı çok geçmeden anlayacaksınız.

IntelliJ'i kullanmak için bile yapılandırabilirsiniz.

IntelliJ, LiteIDE, CGDB, vb .'nin sağladığı tek değer, Go için GDB hata ayıklama desteğinin son derece zayıf olduğunu daha hızlı anlayabilmenizdir.

Bazı Go kodlarında ilerlemek için kullanabilirsiniz, ancak çok basit değişken değerlerinden başka herhangi bir şeyin değerini yazdırmaya çalıştığınızda, iyi bir hata ayıklayıcı dilemekle zamanınızı boşa harcarsınız.

Aşağıda, CGDB kullanarak bir harita [dize] dizesi veri yapısının değerini yazdırmaya çalıştığınızda ne olacağına dair bir örnek verilmiştir:

(gdb) print params
$1 = (github.com/go-martini/martini.Params) 0x15582 <runtime.reentersyscall+450>

... ki bu tamamen işe yaramaz.

Sonra şunu deneyin:

(gdb) print params["UserID"]

... ve "Otobüs hatası" alacaksınız.

Delve ( https://github.com/derekparker/delve ), Go'da yazıldığı için umut verici görünüyor, ancak bir IDE aracılığıyla değil, konsolu kullanarak sürüyorsunuz.

Go'da etkileşimli hata ayıklamayı destekleyen iyi bir iş çıkaran IntelliJ'in (veya başka bir IDE'nin) kurumsal sürümü için memnuniyetle ödeme yapardım.

Şu an itibariyle, fmt.Printf("%v", variable)olabildiğince iyi.


Artık değil! modası geçmiş cevap.
Michele Giuseppe Fadda

mailgun / godebug büyük bir gelişmedir; Kullanmaya değer. Bununla birlikte, kullanmaya değer olan şey, entegre, etkileşimli bir hata ayıklayıcıya sahip bir IDE'dir. Konsoldan hata ayıklama, 80'lerde hata ayıklamayı anımsatır. Go koduma enstrümantasyon eklemek işe yarıyor, ancak biraz müdahaleci. Bir kesme noktası ayarlamak (kaldırmak) için bir kod satırına tıklamayı (kaldırmayı) tercih ederim.
l3x

Tekrar ifade edeceğim ... hata ayıklayıcıyı + akıllı fikir IDE'sini sürdürün.!
Michele Giuseppe Fadda

Merhaba user4839438, yazınızı az önce fark ettim. Deneyecek. Bu işe yararsa, kesinlikle herhangi bir JetBrains yükseltme ücreti ödemeye değer. Ve benim için önemli olduğundan değil, ama Delve hata ayıklayıcısının sözde MS Visual Studio'da çalıştığını duydum. Bkz. Marketplace.visualstudio.com/items/lukehoban.Go
l3x

1
Kontrol ettim ve Sürüm: 2016.1.3, Yapı: 145.1617.8, Çıkış: 5 Haziran 2016, Delve ile çalıştığını bildirmekten mutluluk duyuyorum! Buradan indirebilirsiniz: jetbrains.com/idea/download . Ayrıca buradaki Delve kurulum talimatlarını da izleyin: github.com/derekparker/delve/tree/master/Documentation/…
l3x

9

DÜZENLE

GO hata ayıklayıcı artık IntelliJ veya PyCharm'da basit bir eklentidir, başka bir şey yüklemenize gerek yoktur. Eklenti tercihlerinde Go eklentisini arayın.

Orijinal cevap (Kasım 2015)

Kasım 2015 sonu itibariyle en son arayanlar için:

araştırmak

https://github.com/derekparker/delve

ve oluşturma / kurulum talimatlarını izleyin:

https://github.com/derekparker/delve/wiki/Building

En son IntelliJ (15) veya PyCharm'ı (5) edinin

https://www.jetbrains.com/idea/download/

ve seçtiğiniz IDE'de go-lang-eklentisini edinin:

Pycharm -> Preference -> plugins -> search for go
current version is Version: 0.10.749
IntelliJ -> Preference -> plugins -> search for go
current version is Version: 0.10.749
  1. Yeni bir Go projesi kurun veya bir projeyi içe aktarın.
  2. Go SDK'sını belirtildiği gibi kurun
  3. Go kitaplığınızı kurun (genellikle GOROOT / src'de
  4. 'Oynat' simgesinin sağ üst köşesinde bir Çalıştırma Uygulaması yapılandırması ayarlayın:
  5. Yapılandırmaları Düzenle -> + -> Uygulamaya Git seçeneğine tıklayın

Çalıştırılacak paketi veya dosyayı tanımlayın.

Kurulum tamamlandıktan sonra, Oynat simgesi ve Hata Ayıklama simgesi artık etkin olmalıdır ve her zamanki gibi kesme noktası, saatler vb. Ayarlayabilirsiniz.

Şerefe


değerlendir / izle benim için çalışmıyor: sembol değeri bulamadım ... Bunu sizin için çözebilir misiniz?
Stefan Wuthrich - Altafino

izle ve değerlendir benim için PyCharm 5.0.3 CE ve IntelliJ IDEA 15.0.2'de iyi çalışıyor gibi görünüyor
MrE

Aslında delve oluşturmanıza gerek yok, eklenti otomatik olarak paketlenmiş olarak gelir.
dlsniper

@dlsniper bu yeni mi? Denediğimde, bir süredir go eklentisini kurdum, yükselttim ancak delve oluşturana kadar çalışmadı.
BayE

@MrE delve, yaklaşık 3 ay önce entegre edildiğinden beri eklenti ile birlikte gönderildi. Ancak yalnızca Linux ve Mac OS X'te hem 64bit'te çalışır.
dlsniper


7

IDE DEBUG ON GO MÜMKÜNDÜR (TEKRAR), GERÇEKTEN ÇALIŞIYOR !

Delve , Mac OS X'te oldukça iyi çalışıyor ve IntelliJ IDEA Go Lang eklentisi tarafından destekleniyor .

Bunu Mac OSX, IntelliJ Idea 14, Go 1.5.1, Delve 0.5'te test ettim

Kendinden imzalı bir sertifika oluşturma, bunu sistem halkasına ekleme, vb. (Mac OS X'te bir hata ayıklayıcı çalıştırmak için gerekli) olağan döngüleri boyunca çalışmak zorunda kaldım. Sonunda, IntelliJ içinde bir GO projesi belirledim ve olağan IDE + hata ayıklayıcı özelliklerini geri kazanmak için geri ödeme aldım: kesme noktaları ayarlama, değişkenleri inceleme, tek adımlama.

Bu, kodda hata ayıklamak için değerleri yazdırmaktan çok daha iyidir.


IntelliJ ile nasıl kurduğunuzu açıklayabilir misiniz? Hata ayıklayıcı bir HTTP uç noktası olarak çalışmalıdır, değil mi?
MrE

boşver ... dokümanları vb. buldum ... ama görünüşe göre kutudan çıkar çıkmaz çalışmak için PyCharm veya IntelliJ'in en son sürümünü gerektiriyor.
MrE

Özel bir şey yapmadım, sadece Dvelve ve intelliJ 14'ü yükledim, IntelliJ 15 ile hala düzgün çalışıyor. Önceki sürümler hakkında: Bilmiyorum.
Michele Giuseppe Fadda

7
  1. Birinci seçenek - GDB https://golang.org/doc/gdb

  2. Delve

  3. Visual Studio Kod onun ile gitmek eklenti (hala kullandığı Defterleri).

Ben şahsen 3. seçeneği kullanıyorum. Bunun için araştırma yapmanız gerekecek .

Bu video, hata ayıklamayı uygulamada gösterir: https://youtu.be/uBjoTxosSys?t=16m11s (videonun tamamı çok ilginç).


Delve geride kalıyor ama yine de diğer IMO'lardan daha iyi.
Ostati

1
Bu IMO en iyi cevaptır. Seçenek # 3 aynı zamanda bir çoklu platform çözümüdür. Delve'nin bazı sınırlamaları vardır, ancak temel görsel hata ayıklama oldukça iyi çalışır.
gideon

1

Temelde Go destekli Intellij olan Gogland'dan ( https://www.jetbrains.com/go/ ) oldukça memnun kaldım . Bunu geliştirirken daha iyi hale gelen çalışan bir Hata Ayıklayıcısı var. Ocak 2017'den beri kullanıyorum ve benim için 2016 MBP'de çoğunlukla kararlıydı.

Goland, Go geliştirme için ergonomik bir ortam sağlamayı amaçlayan JetBrains tarafından hazırlanan yeni bir ticari IDE'nin kod adıdır.


Çok hoş! LiteIDE biraz ... çok hafifti. IntelliJ'i seviyorum ve bunu kontrol edeceğim.
Daniel Williams
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.