2010-08-21 11 views
117

प्रश्न आपके सभी लोगों के लिए है, जो सी ++ अनुप्रयोगों को विकसित करने के लिए विम का उपयोग करते हैं।क्या आप विम में सी ++ कोड डीबग करते हैं? कैसे?

मेरे जीवन में एक अवधि थी, जिसे के रूप में वर्णित किया जा सकता है 'मुझे विम से नफरत है !!!' .. 'विम अच्छा है!'

हालांकि, ज्यादातर माइक्रोसॉफ्ट विकास IDEs पर बड़ा हो रहा है, मैं उन F5 के लिए इस्तेमाल किया गया गया है - F11 शॉर्टकट जब debugging कोड, खिड़की, कॉल स्टैक और मुख्य कोड देखना - टाइप करने के लिए की आवश्यकता के बिना सभी दृश्य कोई भी जीडीबी आदेश।

आप डीबगिंग के लिए के रूप में अच्छी विम का उपयोग करते हैं:

तो, यहां सवाल यह है? या आप इस उद्देश्य के लिए कुछ आईडीई पर स्विच करते हैं? कौनसा?

जो लोग डिबग कोड को विम उपयोग करें: संपादक में breakpoints सेट करने के लिए वहाँ प्लग इन कर रहे हैं, लाइन हम वर्तमान में डिबगिंग कर रहे हैं, चरण के दौरान ऑटो नेविगेशन पर प्रकाश डाला में, बाहर कदम कदम?

कृपया, मुझे मत बताओ आप कमांड लाइन के रूप में GDB का उपयोग करें, केवल एक लाइन जो डिबग है, आदि

+0

मुझे यकीन है कि आप अभी भी "ed" के साथ लोगों को विकसित और डिबगिंग कर सकते हैं। –

+40

हे भगवान, वे सवालों का जवाब देते हैं "मेरे सी ++ कोड plz डीबग करें", लेकिन बंद * यह * बहुत स्थानीयकृत ... हास्यास्पद! –

+10

'gdb -tui' आज़माएं। – Jayesh

उत्तर

65

अन्य उत्तरों के विपरीत, कम से कम तीन विकल्प हैं जो आपको केवल वही करते हैं जो आपको चाहिए: clewn, pyclewn और vimgdb

सभी तीन परियोजनाएं संबंधित हैं। vimgdb विम के खिलाफ एक पैच है और इसके लिए विम को पुनः संयोजित करने की आवश्यकता है।साफ़ एक स्टैंडअलोन प्रोग्राम है जो नेटबीन्स सॉकेट इंटरफेस के माध्यम से विम के साथ संचार करता है। इसके लिए विम को +netbeans विकल्प के साथ बनाया जाना चाहिए (यह हाल ही में लिनक्स वितरण में मामला है इसलिए यह कोई समस्या नहीं होनी चाहिए)।

clewn की वेबसाइट से उद्धृत करने के लिए:

Clewn vim संपादक में पूर्ण gdb समर्थन लागू करता है: विच्छेदबिंदु,

घड़ी चर, gdb आदेश पूरा होने, विधानसभा खिड़कियां, आदि मैं आपको लगता है निश्चित रूप से इसे जाना चाहिए।

pyclewn वेबसाइट का मुखपृष्ठ तीन परियोजनाओं के बीच तुलना दिखाता है।

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

+4

कंक जीडीबी एक अच्छा विकल्प है। स्थापित करने में आसान, सरल और बहुत शक्तिशाली। – Druesukker

+0

@UncleZeiv vimgdb पुराना है। मैंने यहां एक अपडेट की आवश्यकता व्यक्त की: https://github.com/larrupingpig/vimgdb-for-vim7.4/issues/4 – hlin117

+0

@Druesukker, आपका उत्तर औपचारिक उत्तर देने योग्य है! – solotim

1

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

लंबी कहानी छोटी, मैंने डीबगर का बिल्कुल उपयोग नहीं किया। अगर मेरे पास अप्रत्याशित रूप से कुछ मर गया था, तो मैं सिर्फ लॉगिंग स्तर को टक्कर लूंगा, इसे फिर से चलाऊंगा, और देख सकता हूं कि उसकी मृत्यु से पहले आखिरी चीज क्या थी, फिर इसका विश्लेषण करें और इस मुद्दे को ठीक करें।

अच्छी बात यह थी कि जब किसी ग्राहक माहौल में कुछ समस्याएं थीं, तो मैं सिर्फ डीबग-स्तरीय लॉग मांगता था और बिना किसी सर्वर के पहुंच की आवश्यकता के मुद्दे को पहचान सकता था।

... लेकिन हाँ, ऐसे समय थे जब डीबगर होने के लिए अच्छा होता।

12

विम एक अच्छा संपादक है, लेकिन डिबगिंग करने के लिए मैं एक डीबगर (जैसे जीडीबी) का उपयोग करता हूं।

लेकिन आपको टेक्स्ट मोड में जीडीबी का उपयोग करने की आवश्यकता नहीं है; आप KDbg, DDD या Insight जैसे ग्राफ़िकल फ्रंटेंड का उपयोग कर सकते हैं।

जीएमबी को विम में प्राप्त करने के तरीके हैं (लेकिन फिर आपको टेक्स्ट आधारित डिबगिंग मिलती है)।

+2

gdbtui कोशिश करें .. टर्मिनल आधारित लेकिन काफी प्रभावी .. – Jack

+0

gdbtui भी अच्छा है। – Johan

0

मैं विंडोज और * निक्स सिस्टम पर लेखन और ब्राउज़िंग कोड के लिए vim + ctags + टैगलिस्ट का उपयोग करता हूं। जहां तक ​​मुझे पता है कि विम के भीतर से डीबगर का उपयोग करने का कोई तरीका नहीं है, इसलिए मैं बाहरी डिबगर्स (वीएस, विंडबग, जीडीबी ...) का उपयोग करता हूं।

3

स्रोत स्तर डीबगर का उपयोग करना दोषपूर्ण प्रोग्राम व्यवहार का निदान करने के कई तरीकों में से एक है, और मुझे शायद ही कभी खुद को लॉन्च करना पड़ता है - इस तथ्य के बावजूद कि यह करना बहुत आसान है।

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

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

डिफ़ॉल्ट editorex है, लेकिन vim भी +<current-line> प्रारूप को समझता है:

+0

जब तक आप एक केडीई/जीनोम-मुक्त विकास होस्ट पर दूरस्थ विकास नहीं कर रहे हैं। – user826955

0

GDB edit आदेश

आदेश का उपयोग कर मौजूदा लाइन पर एक संपादक खोलता है।

जब आप संपादक से बाहर निकलेंगे, तो आप gdb पर वापस आएं।

यह आपको स्रोत को आसानी से ब्राउज़ करने की अनुमति देता है और यदि आपके पास ctags एकीकरण है तो विशेष रूप से शक्तिशाली है।

यह एक गरीब व्यक्ति का अंतर्निहित एक तरीका है जीडीबी एकीकरण के लिए: मुख्य गायब चीज विम से ब्रेकपॉइंट्स सेट कर रही है।

edit और केंद्र

edit स्रोत के आसपास डिफ़ॉल्ट रूप से नहीं केंद्र विम करता है, तो मुझे लगता है कि करता है यह एक अजगर स्क्रिप्ट बनाने के बाद: How to open the current file at the current line in a text editor from GDB?

ब्रेकप्वाइंट आदेश क्लिपबोर्ड सहायक

को

यह वीआईएम कमांड टाइप के ब्रेकपॉइंट विनिर्देशक की प्रतिलिपि बनाता है:

b <file-path>:<line-number> 
क्लिपबोर्ड

:

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

तो फिर तुम सिर्फ पेस्ट कर सकते हैं कि gdb में।

यह ब्रेकपॉइंट्स को सेट करने के लिए जीडीबी एकीकरण के लिए एक गरीब व्यक्ति का विम है।

संबंधित मुद्दे