क्या कोई गोलंग इंटरैक्टिव डिबगर मौजूद है? [बन्द है]


85

शीर्षक बहुत अधिक यह रकम है। मैं गो की कोशिश कर रहा हूं और मुझे वास्तव में ब्रेकपॉइंट सेट करने और / ओवर / आउट में सेट करने में सक्षम होने की याद आती है जितना मैं एक इंटरैक्टिव वातावरण में चाहता हूं। मुझे पता है कि मैं gdb का उपयोग गो को डीबग करने के लिए कर सकता हूं लेकिन यह एक IDE का उपयोग करने की तुलना में काफी कष्टप्रद है जो ब्रेकडाउनिंग के लिए gdb में प्लग कर सकता है।

मैंने एक खोज करने की कोशिश की और केवल प्लगइन्स या छोटे IDE पा सकते हैं जिनमें वाक्य रचना हाइलाइटिंग है लेकिन कोई डीबगिंग नहीं है।


इस प्रश्न पर उतरने वाले किसी अन्य व्यक्ति के लिए, सुनिश्चित करें कि आप अन्य उत्तरों की जांच करते हैं, न कि केवल (वर्तमान में स्वीकृत) जीडीबी के बारे में
Leigh

जवाबों:


38

अद्यतन : व्यक्तिगत रूप से, जबकि GDB काम करता है मैं इसे गो में उपयोग करने का प्रशंसक नहीं हूं और यह आपको कुछ रक्त थूक देगा। अच्छे विकल्पों में से कुछ अन्य उत्तरों की जाँच करें।


हां बिल्कुल :)

गो में एक डिबगर (GDB) है

यहां इसका उपयोग करने के तरीके के बारे में आधिकारिक ट्यूटोरियल है।

यदि आप 'ग्राफ़िकल डीबगिंग' (यानी संपादक में ब्रेकपॉइंट सेट करना) चाहते हैं, तो कुछ आईडीई आपको पृष्ठभूमि में जीडीबी के साथ ऐसा करने देते हैं।

विशिष्ट में, ग्रहण, लाइट और ज़ीस सभी आपको अपने कोडिंग वातावरण (स्रोत) से ब्रेकपॉइंट और डीबग सेट करने देते हैं । ज़ीउस के साथ यह कैसे करना है पर एक वीडियो है


2
एक अनुवर्ती के रूप में मैं एक मैक पर हूँ और मैंने पाया है कि IntelliJ विकास को बहुत अच्छा और आसान बनाने के लिए प्लगइन है, लेकिन लाइट वीडियो डिबगिंग में बहुत बढ़िया है (हालांकि यह बहुत अच्छा काम नहीं करता है)। मुझे यह काम करने के लिए एक अद्यतन GDB स्थापित करना पड़ा जो कि दर्दनाक था।
डैनियल विलियम्स

4
इसमें बहुत सारे मुद्दे हैं और भविष्य में गो टीम द्वारा समर्थित नहीं किया जाएगा (बुनियादी कार्यक्षमता के अलावा), नीचे मेरा जवाब देखें
मेटाकेक

जीडीबी ऑन गो ने सदियों पहले तोड़ दिया और अब कार्यात्मक नहीं है। स्वीकृत उत्तर बिल्कुल गलत है।
मिशेल गिउसेप्पे फड्डा

@ user4839438 उह, पहली दो पंक्तियाँ वस्तुतः "god पर gdb का उपयोग न करें" हैं। मैंने व्यक्तिगत रूप से उपयोग godebugकिया था जो पिछली बार मैंने बहुत अच्छा किया था।
बेंजामिन ग्रुएनबाम

आप सही कह रहे हैं, लेकिन शीर्षक कहता है "गो में एक डिबगर (जीडीबी) है" , जो वास्तव में अब सच नहीं है और वर्तमान में एक असंतोष है। GDB गोलंग के पुराने संस्करणों के साथ काम करता था, इसे काम करने की कोशिश करना एक बड़ी चिता थी, और अंत में, यह काम नहीं करता था और संभवतः काम नहीं कर सकता था। मैं बारहवीं के साथ एक खुश पिल्ला हूं, मैं गॉडबग भी कोशिश करूंगा
मिशेल गिउसेप्पे फड्डा

29

गो के लिए GDB समर्थन में बहुत सी समस्याएँ हैं जिन्हें गो टीम द्वारा ठीक नहीं किया जाएगा।

अधिक जानकारी के लिए, रोब पाइक द्वारा पोस्ट पढ़ें :

यद्यपि हम समर्थित प्लेटफार्मों पर काम करने वाले बुनियादी gdb कार्यक्षमता (स्टैक ट्रेस, प्रिंटिंग वैल्यू) को रखने का प्रयास करेंगे, लेकिन गो कार्यक्रम के पूर्ण वातावरण को समझने के लिए डिबगर का उपयोग करने की क्षमता कभी भी काम नहीं करेगी, और gdb समर्थन में सुधार करना टीम के लिए प्राथमिकता नहीं है। ।

वे अन्य डिबगिंग विकल्पों की तलाश कर रहे हैं लेकिन अब तक उनकी कोई ठोस योजना नहीं है। प्रलेखन पुराना है और runtime-gdb.py1.2 के साथ आने वाली स्क्रिप्ट GDB के लिए काम नहीं करती है जिसे python3 समर्थन (उदाहरण के लिए वर्तमान उबंटू) के साथ संकलित किया गया था।


25
यह उस भाषा के लिए आश्वस्त नहीं है जिसे अब अपनाया जा रहा है
वेलेरियो

2
@ ValerioColtrè मुझे कभी भी डिबगर की आवश्यकता नहीं थी। इकाई परीक्षण और Printf ("% # v", ...) मुझे अब तक अच्छी तरह से सेवा की ...
महानायिका

20
@metakeule किसी को भी डिबगर की जरूरत नहीं है, हालांकि, एक अच्छा डिबगर डिबगिंग में अविश्वसनीय रूप से सहायक और अधिक कुशल साबित हो सकता है - विशेष रूप से डिबगिंग विफल परीक्षणों में। इसके अलावा, डिबगर्स आपके कोड को नहीं बदलते हैं, जबकि प्रिंट स्टेटमेंट करते हैं।
गत

जीडीबी डॉक्स से: "जीडीबी गो कार्यक्रमों को अच्छी तरह से नहीं समझता है। स्टैक प्रबंधन, थ्रेडिंग और रनटाइम में ऐसे पहलू होते हैं जो निष्पादन मॉडल जीडीबी से काफी भिन्न होते हैं। उन्हें उम्मीद है कि वे डिबगर को भ्रमित कर सकते हैं, भले ही कार्यक्रम gccgo के साथ अनुपालन हो। एक परिणाम, हालांकि GDB कुछ स्थितियों में उपयोगी हो सकता है, यह गो कार्यक्रमों के लिए एक विश्वसनीय डिबगर नहीं है, विशेष रूप से भारी समवर्ती "
मासुकोमी

डीबगर्स के साथ गो कैसे काम करता है? "हमने कुछ समय के लिए कस्टम गो डिबगर के बारे में बात की है, लेकिन अभी तक कोई नहीं है।" रस कॉक्स द्वारा
इवान चाऊ

24

अद्यतन 2017: नीचे दिए गए godebug परियोजना का उल्लेख अब आधिकारिक रूप से derekparker / delve द्वारा प्रतिस्थापित किया गया है ।


मूल उत्तर:

अब आपको (मार्च 2015) कोड इंस्ट्रूमेंट करने के आधार पर एक और दृष्टिकोण है।

mailgun / godebug :

godebugडिबगिंग कॉल के साथ अपने प्रोग्राम को इंस्ट्रूमेंट करने के लिए सोर्स कोड जेनरेशन का उपयोग करता है ।
go tool coverकोड कवरेज के लिए एक समान दृष्टिकोण लेता है।

  • जब आप दौड़ते हैं godebug, तो यह आपके प्रोग्राम, इंस्ट्रूमेंट्स फंक्शन कॉल, वेरिएबल डिक्लेरेशन और स्टेटमेंट लाइन्स को पार्स कर देता है और परिणामी कोड को कहीं आउटपुट करता है (वर्तमान में या तो स्टडआउट या आपकी मूल फाइलों के स्थान पर)।
  • जब आप इस संशोधित कोड को चलाते हैं, तो मान लें कि आपने कहीं ब्रेकपॉइंट लगाया है, तो आप इसके माध्यम से कदम उठा सकते हैं और चर का निरीक्षण कर सकते हैं।

बाद में आ रहा है: मनमाने ढंग से जाने वाले भावों का मूल्यांकन करें और चर लिखें।


अपडेट जून 2015:

हालांकि यह "कुछ" की उम्मीद के रूप में इंटरैक्टिव नहीं हो सकता है, यह अभी भी सराहना की जाती है (और "सुविधा में" कदम है )।
देखें " गो में एक डीबगर है - और यह बहुत बढ़िया है! "

यहाँ एक शांत सा है: आधा दर्जन अलग-अलग ptraceइंटरफेस के साथ कुश्ती के बजाय जो पोर्टेबल नहीं होंगे, godebugअपने स्रोत कोड को फिर से लिखते हैं और हर चर पर godebug.Line, godebug.Declareहर चर घोषणा पर, और godebug.SetTraceब्रेकपॉइंट्स के लिए फ़ंक्शन कॉल को इंजेक्ट करते हैं (यानी जहां भी आप टाइप करते हैं _ = "breakpoint")।

मुझे यह समाधान शानदार लगता है।
जो आप इससे बाहर निकलते हैं वह एक (संभवतः क्रॉस-संकलित) डिबग-सक्षम बाइनरी है जिसे आप एक स्टेजिंग सर्वर पर वैसे ही गिरा सकते हैं जैसे आप एक नियमित बाइनरी के साथ करेंगे

जब एक ब्रेकपाइंट पहुंच जाता है, तो प्रोग्राम इनलाइन बंद कर देगा और स्टड पर आपका इंतजार करेगा।

यह एकल-द्विआधारी, शून्य-निर्भरता दर्शन का दर्शन है जिसे हम डिबगिंग पर लागू करते हैं। हर जगह बनाता है, हर जगह चलाता है, सर्वर पर उपकरण या अनुमतियों की कोई आवश्यकता नहीं है।

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

डिबगिंग बस एक make bin/rrdns GODEBUG=rrdns/...दूर है।


गोदेबग को अब पदावनत कर दिया गया है और वे डेलवे का उपयोग करने की सलाह देते हैं
अलेक्जेंड्रो डी ओलिवेरा

@AlexandrodeOliveira धन्यवाद। मैंने उसी हिसाब से जवाब अपडेट किया है।
VonC

बाहर की कोशिश कर रहा है, बहुत अच्छी तरह से काम करने लगता है। मुझे लगता है कि एक सभ्य ओपन सोर्स टूल का यह जवाब सवाल को कम "ऑफ टॉपिक" बनाता है। मैं बंद टूल को रेट नहीं करना चाहता। हो सकता है कि इस सवाल को फिर से पढ़े जाने की जरूरत है, लेकिन मुझे यह पता चला कि इसे खोजने के लिए gdb के विकल्प की खोज करनी चाहिए (gdb) वास्तव में जाने के लिए अनुशंसित नहीं है।
गेरी ग्लीसन

15

अपडेट करें:

मैंने इसे देख लिया है और यह रिपोर्ट करके खुश हूं कि संस्करण: 2016.1.3, बिल्ड: 145.1617.8, विमोचित: 5 जून, 2016 डेलवे के साथ काम करता है! आप इसे यहाँ डाउनलोड कर सकते हैं: https://www.jetbrains.com/idea/download/ । यहां भी Delve install निर्देशों का पालन करें: https://github.com/derekparker/delve/tree/master/Documentation-installation

यह थोड़ा परतदार है। बस के बाद मैंने OSX लॉगिन प्रॉम्प्ट किया इंटरैक्टिव इंटरैक्टिव डिबगिंग ने काम करना शुरू कर दिया। कभी-कभी, मुझे इसे शुरू करने के लिए एक साधारण .go कार्यक्रम को डीबग करना पड़ता है। लेकिन यह काम करता है और गो के लिए सबसे अच्छा इंटरैक्टिव डिबगिंग अनुभव है जो मैंने देखा है।

मूल पोस्ट:

क्या कोई गोलंग इंटरैक्टिव डिबगर मौजूद है? हाँ।

क्या कोई गोलंग इंटरएक्टिव डिबगर, जो उपयोग करने लायक है, मौजूद है? नहीं।

मैक पर GDB कॉन्फ़िगर करना थकाऊ है, लेकिन उल्लेखनीय है।

हालाँकि, एक बार जब आप इसका उपयोग करना शुरू कर देंगे, तो आपको जल्द ही पता चल जाएगा कि आपने इसे स्थापित करने में अपना समय बर्बाद किया है।

आप इसका उपयोग करने के लिए IntelliJ को भी कॉन्फ़िगर कर सकते हैं।

एकमात्र मान जो IntelliJ, LiteIDE, CGDB, आदि प्रदान करते हैं, यह है कि आप अधिक तेज़ी से यह पता लगा सकते हैं कि Go के लिए GDB डिबगिंग समर्थन बेहद खराब है।

आप इसका उपयोग कुछ गो कोड के माध्यम से करने के लिए कर सकते हैं, लेकिन बहुत ही सरल चर मानों के अलावा किसी भी चीज़ के मूल्य को प्रिंट करने का प्रयास करें और आप एक अच्छे डिबगर के लिए अपना समय बर्बाद कर रहे हैं।

जब आप CGDB का उपयोग करते हुए मानचित्र [स्ट्रिंग] स्ट्रिंग डेटा संरचना के मूल्य को प्रिंट करने का प्रयास करते हैं तो क्या होता है इसका एक उदाहरण यहां दिया गया है:

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

... जो पूरी तरह से बेकार है।

अगला, यह प्रयास करें:

(gdb) print params["UserID"]

... और आपको "बस त्रुटि" मिलेगी।

Delve ( https://github.com/derekparker/delve ) होनहार लग रहा है, क्योंकि यह गो में लिखा है, लेकिन आप इसे कंसोल का उपयोग करके चलाते हैं, न कि एक आईडीई के माध्यम से।

मैं ख़ुशी से IntelliJ (या किसी अन्य IDE) के एंटरप्राइज़ संस्करण के लिए भुगतान करूँगा जिसने गो में इंटरैक्टिव डिबगिंग का समर्थन करने वाला एक अच्छा काम किया।

अभी के रूप में, के fmt.Printf("%v", variable)रूप में यह हो जाता है के रूप में अच्छा है।


अब और नहीं! पुराना उत्तर।
मिशेल गिउसेप्पे फड्डा

mailgun / godebug एक विशाल सुधार है; यह प्रयोग करने लायक है। हालांकि, जो उपयोग करने के लिए बहुत अधिक योग्य होगा वह एक आईडीई है जिसमें एक एकीकृत, इंटरैक्टिव डिबगर था। कंसोल से डिबगिंग 80 के दशक में डिबगिंग की याद ताजा करती है। मेरे Go कोड में इंस्ट्रूमेंटेशन जोड़ना काम करता है, लेकिन थोड़ा घुसपैठ है। मैं बल्कि (संयुक्त राष्ट्र) कोड की एक पंक्ति (संयुक्त राष्ट्र) पर एक ब्रेकपॉइंट सेट करना चाहता हूं।
l3x

मैं आराम करूंगा ... डिब्वेगर + इंटेलीज आइडिया आईडीई!
मिशेल Giuseppe Fadda

हे user4839438, मैंने अभी आपकी पोस्ट पर ध्यान दिया है। इसे आजमाएंगे। यदि वह काम करता है, तो यह निश्चित रूप से किसी भी JetBrains उन्नयन शुल्क का भुगतान करने के लायक होगा। और ऐसा नहीं है कि यह मेरे लिए मायने रखता है, लेकिन मैंने सुना है कि डेले डिबगर एमएस विज़ुअल स्टूडियो में माना जाता है। देखें marketplace.visualstudio.com/items/lukehoban.Go
l3x

1
मैंने इसे देख लिया है और यह रिपोर्ट करके खुश हूं कि संस्करण: 2016.1.3, बिल्ड: 145.1617.8, विमोचित: 5 जून, 2016 डेलवे के साथ काम करता है! आप इसे यहाँ डाउनलोड कर सकते हैं: jetbrains.com/idea/download । इसके अलावा
डेलवे

9

संपादित करें

जीओ डीबगर अब इंटेलीज या पाइकहार्म में एक सरल प्लगइन है, और कुछ भी स्थापित करने की आवश्यकता नहीं है। बस प्लगइन वरीयताओं में जाओ प्लगइन के लिए देखो।

मूल उत्तर (नवंबर 2015)

नवंबर 2015 के अंत तक नवीनतम की तलाश करने वालों के लिए:

बहक जाना

https://github.com/derekparker/delve

और बिल्ड / सेटअप निर्देशों का पालन करें:

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

नवीनतम IntelliJ (15) या PyCharm (5) प्राप्त करें

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

और अपनी पसंद के IDE में गो-लैंग-प्लगइन प्राप्त करें:

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. एक नया गो प्रोजेक्ट सेट करें, या एक प्रोजेक्ट इम्पोर्ट करें।
  2. आप एसडीके को संकेत के अनुसार सेटअप करें
  3. अपनी गो लाइब्रेरी सेटअप करें (आमतौर पर GOROOT / src में
  4. 'प्ले' आइकन द्वारा रन एप्लिकेशन कॉन्फ़िगरेशन टॉप राइट कॉर्नर सेट करें:
  5. कॉन्फ़िगरेशन संपादित करें -> क्लिक करें + -> जाओ आवेदन

आपको पैकेज या फ़ाइल चलाने के लिए परिभाषित करें।

एक बार सेटअप के साथ हो जाने पर, प्ले आइकन और डिबग आइकन अब सक्रिय होना चाहिए, और आप हमेशा की तरह ब्रेकपॉइंट, घड़ियों आदि को सेट कर सकते हैं।

चियर्स


मूल्यांकन / घड़ी मेरे लिए काम न करें: के लिए प्रतीक मूल्य नहीं मिला ... क्या आप इसके लिए हल कर सकते हैं?
स्टीफन वुथरिक - अल्ताफिनो

देखो और मूल्यांकन मेरे लिए ठीक काम करने के लिए लगता है, PyCharm 5.0.3 CE में और साथ ही IntelliJ IDEA 15.0.2
MrE

आपको वास्तव में डेलवे बनाने की आवश्यकता नहीं है, प्लगइन इसके साथ स्वचालित रूप से बंडल हो जाता है।
Dlsniper

@dlsniper यह हाल है? जब मैंने कोशिश की, तो मुझे थोड़ी देर के लिए गो प्लगइन इंस्टॉल करना पड़ा, मैंने अपग्रेड किया लेकिन जब तक मैंने डिलीट नहीं किया तब तक यह काम नहीं किया।
20

@MrE delve को एकीकृत होने के बाद से प्लगइन के साथ भेज दिया गया है, जो लगभग 3 महीने पहले है। लेकिन यह केवल 64 बिट पर लिनक्स और मैक ओएस एक्स पर काम करता है।
dlsniper


7

IDE DEBUG ON GO IS POSSIBLE (AGAIN), ACTUALLY WORKS !

Delve Mac OS X पर अच्छी तरह से काम करता है और IntelliJ IDEA Go Lang प्लगइन द्वारा समर्थित है ।

मैंने परीक्षण किया कि मैक ओएसएक्स पर, इंटेलीज आइडिया 14, गो 1.5.1, डेल्वे 0.5

मुझे एक स्व-हस्ताक्षरित प्रमाण पत्र बनाने के सामान्य छोरों के माध्यम से चलाना था, इसे सिस्टम रिंग में जोड़ना, आदि (मैक ओएस एक्स में डिबगर चलाने के लिए आवश्यक)। अंत में, मैंने IntelliJ के अंदर एक GO प्रोजेक्ट सेट किया और सामान्य IDE + डीबगर सुविधाओं को प्राप्त करने में चुकाया गया: ब्रेकपॉइंट्स सेट करना, चर का निरीक्षण करना, सिंगल स्टेपिंग।

कोड डिबग करने के लिए मूल्यों को प्रिंट करने से बेहतर है।


क्या आप बता सकते हैं कि आपने इसे इंटेलीज के साथ कैसे स्थापित किया? डीबगर को HTTP समापन बिंदु के रूप में चलना चाहिए, है ना?
श्रीमती डिक

कोई बात नहीं ... डॉक्स आदि मिला ... लेकिन बॉक्स के बाहर काम करने के लिए स्पष्ट रूप से PyCharm या IntelliJ के नवीनतम संस्करण की आवश्यकता है।
मृ।

मैंने कुछ खास नहीं किया, मैंने सिर्फ Dvelve और intelliJ 14 को स्थापित किया, यह अभी भी IntelliJ 15 के साथ सही ढंग से काम करता है। पिछले संस्करणों के बारे में: मुझे नहीं पता।
मिशेल ग्यूसेप फड्डा

7
  1. विकल्प एक - GDB https://golang.org/doc/gdb

  2. दहाना

  3. इसके जाने के प्लगइन के साथ विजुअल स्टूडियो कोड (अभी भी डेलवे का उपयोग करता है)।

मैं व्यक्तिगत रूप से विकल्प 3 का उपयोग करता हूं। इसके लिए आपको delve इंस्टॉल करना होगा।

यह वीडियो एक्शन में डीबगिंग दिखाता है: https://youtu.be/uBjoTxosSys?t=16m11s (पूरा वीडियो बहुत दिलचस्प है)।


Delve हालांकि पीछे है लेकिन अन्य IMO से बेहतर है।

1
यह IMO सबसे अच्छा जवाब है। विकल्प # 3 यह भी एक बहु मंच समाधान है। डेलवे की कुछ सीमाएँ हैं लेकिन बुनियादी दृश्य डिबगिंग अच्छी तरह से काम करती है।
गिदोन

1

मैं गोगलैंड ( https://www.jetbrains.com/go/ ) के साथ बहुत खुश हूं जो मूल रूप से गो समर्थन के साथ इंटेलीज है। यह एक काम करने वाला डिबगर है जो बेहतर हो रहा है क्योंकि वे इसे विकसित कर रहे हैं। मैं जनवरी 2017 से इसका उपयोग कर रहा हूं और यह 2016 एमबीपी पर मेरे लिए ज्यादातर स्थिर रहा है।

गोलैंड, जेटब्रेन द्वारा गो विकास के लिए एक एर्गोनोमिक वातावरण प्रदान करने के उद्देश्य से एक नए वाणिज्यिक आईडीई का कोडनेम है।


बहुत अच्छा! लाइटइड थोड़ा सा रहा है ... बहुत हल्का। मुझे इंटेलीज बहुत पसंद है और मैं इसकी जांच करूंगा।
डैनियल विलियम्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.