मैं जीडीबी को विम के साथ कैसे एकीकृत कर सकता हूं?


52

इसके बजाय gdbtuiया जिसके ctrl+xतहत gdbस्क्रीन के शीर्ष पर स्रोत कोड दिखाता है मैं अपने विम संपादक में यह देखना चाहूंगा जो कि टैब, और बफ़र्स के बीच कूद जाएगा।

मैं यह कैसे कर सकता हूँ?


बस संदर्भ के लिए मैंने lldb plugin @ github.com/gilligan/vim-lldb और स्क्रीनशॉट को आशाजनक देखा।
नाम

BTW, किसी को भी विंडबग के बारे में कुछ पता है? विम एकीकरण एक अच्छा विचार हो सकता था। हालाँकि, वास्तव में मुझे लगता है कि यह लगभग किसी भी सॉफ्टवेयर के बारे में है।
पलक करनी

जवाबों:


33

मेरे द्वारा आजमाए गए सभी प्लगइन्स में, मैंने ConqueGDB को सबसे अच्छा तरीका पाया । ConqueGDB, Conque Shell का उपयोग विम के अंदर एक इंटरैक्टिव शेल को एम्बेड करने के लिए करता है , जिसका उपयोग GDB द्वारा किया जाता है।

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

कुछ ConqueGDB डिफ़ॉल्ट मैपिंग, उदाहरण के लिए:

  • leaderr : Daud
  • leaderc : जारी रखें
  • leaders : चरण
  • leaderp : कर्सर के नीचे प्रिंट चर

ध्यान दें कि एक GDB 'प्रिंट पंक्ति' को जारी करने के लिए vim कर्सर लाइन का उपयोग कैसे किया गया है, कोड का वर्तमान निष्पादन दूसरी लाइन (14) में है और लाइन 10 पर एक विराम बिंदु है।

CongueGDB के साथ विम

उदाहरण के लिए Vundle के साथ स्थापित करने के लिए:

Plugin 'vim-scripts/Conque-GDB'

मैं इन प्लगइन विकल्पों का उपयोग करता हूं:

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  

क्या leaderमतलब है?
in78

@ In78 इसका अर्थ है अधिकांश कंप्यूटरों पर <kbd> \ </ kbd> कुंजी। उदाहरण के लिए <leader>rमेरे कंप्यूटर पर <kbd> \ </ kbd> + <kbd> r </ kbd> का अर्थ है। विम मैनुअल में इसके लिए एक प्रविष्टि है::help leader
परसा

इस ConqueGDB डिफ़ॉल्ट मानचित्रण को नहीं भूलना <Leader>b:। यह कर्सर स्थिति पर एक ब्रेकपॉइंट सेट करता है। हालाँकि, यह टॉगल नहीं है, इसलिए आप इसे फिर से निकालने के लिए उपयोग नहीं कर सकते। बल्कि, आपको GDB प्रॉम्प्ट पर 'स्पष्ट' लिखना होगा।
सेरुप

मैंने इस ConqueGdb का उपयोग करने की कोशिश की है और इसे काम करने के लिए मैंने पहली बार निष्पादन योग्य फ़ाइल निर्दिष्ट की है - और कभी-कभी यह ब्रेकपाइंट्स सेट करने में विफल रहता है - मुझे gdb विंडो पर ध्यान केंद्रित करना होगा और सम्मिलित करने के लिए प्रेस करना होगा, इससे पहले कि ब्रेकपॉइंट दिखाई देगा - यह है ConqueGdb के लिए सामान्य?
सेरुप

11

आपके पास कई प्लगइन्स हैं जो gdb को एकीकृत करते हैं।

  • हम साइकिल चलाते थेपरियोजना बंद कर दिया गया संस्करण 2.3 के बाद। आखिरी प्रतिबद्धता 2016 में की गई है। जिज्ञासुओं के लिए अभी भी जीथुब पर एक दर्पण है जहां इसके लेखक ने अपने काम को संग्रहीत किया है। नोट: अन्य ज़ेवियर डेगये की * क्लेवन परियोजनाओं के विकास में पाइक्विंन अंतिम चरण का चरण हुआ करता था।
  • विम-डिबगर , जो कई अन्य डीबगर को एकीकृत करता है
  • NotEvil की विम-डिबग , जो "कमियों को दूर करने के लिए पाइक्लेन की सुविधा परत" के रूप में कार्य करता है

और एक प्लगइन भी है जो lldb (LLVM प्रोजेक्ट से) को एकीकृत करता है

ऐसा लगता है कि ब्रैम वर्तमान में (सितंबर 2017) जीडीबी के एकीकरण पर काम कर रहा है जो नई :terminalसुविधा के लिए विम धन्यवाद के भीतर से है । इसका उपयोग करने के लिए, हमें termdebugपैकेट (साथ :packadd termdebug) लोड करने की आवश्यकता है , फिर हम एक vim विंडो में gdb कंसोल को शुरू करने में सक्षम होंगे :TermDebug (+options)। IMO, हम इसे VDB के तहत GDB एकीकरण का भविष्य मान सकते हैं।


4
अच्छा - क्या आप इनमें से प्रत्येक प्लग इन का संक्षिप्त अवलोकन दे सकते हैं?
मूरू

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

2
@LucHermitte पोस्ट समीक्षा कतार में आया; मैंने स्वयं इस संदेश का सटीक पाठ नहीं जोड़ा, सिस्टम ने मेरे लिए ऐसा किया। किसी भी स्थिति में, केवल एसओ साइटों पर, एसओ और अधिकांश पर लिंक को "खराब" माना जाता है। सिर्फ इसलिए नहीं क्योंकि वे तारीख से बाहर जा सकते हैं, बल्कि इसलिए भी क्योंकि वे वास्तव में चीजों की व्याख्या नहीं करते हैं; लगभग किसी भी प्रश्न को सही दस्तावेज पृष्ठ (नों) से जोड़कर "उत्तर" दिया जा सकता है, नरक, आप स्रोत कोड से भी लिंक कर सकते हैं, लेकिन क्या यह वास्तव में कुछ समझाता है? क्या यह वास्तव में उपयोगी है? क्या वास्तव में विम की समझ में किसी का योगदान है?
मार्टिन टूरनोइज

1
"मैंने स्वयं इस संदेश का सटीक पाठ नहीं जोड़ा है, सिस्टम ने मेरे लिए ऐसा किया है" । ठीक। उस संदेश की व्याख्या करता है, जो मुझे काफी अजीब लगा। लिंक के बारे में। मैं RTFM / SFTW के बारे में SO / SE नीति समझता हूं। अन्य मंचों के विपरीत, आवर्ती / डुप्लिकेट प्रश्न पता लगने पर बंद हो जाते हैं, और SO / SE एक विकी दृष्टिकोण की ओर अधिक झुक जाते हैं।
ल्यूक हरमिट

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

7

GDB editकमांड

कमांड का उपयोग करके वर्तमान लाइन पर एक संपादक खोलता है:

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

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

जब आप संपादक को छोड़ देते हैं, तो आप वापस आ जाते हैं gdb

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

यह एक गरीब आदमी का बिल्ट-इन वन तरीका है gdb to vim इंटीग्रेशन: मुख्य अनुपलब्ध चीज विम से ब्रेकप्वाइंट सेट कर रही है।

edit और केंद्र

editस्रोत के चारों ओर डिफ़ॉल्ट रूप से Vim केंद्र नहीं करता है, इसलिए मैंने एक पायथन स्क्रिप्ट बनाई है जो इसे करती है: https://stackoverflow.com/questions/43557405/how-to-open-the-current-file-at-the-the वर्तमान लाइन में एक-पाठ संपादक से-gdb / 43557406 # 43557406

ब्रेकपॉइंट कमांड क्लिपबोर्ड हेल्पर को

यह vim कमांड एक ब्रेकपॉइंट निर्दिष्ट करता है जो टाइप का होता है:

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

क्लिपबोर्ड पर:

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

तो आप बस में पेस्ट कर सकते हैं gdb

यह ब्रेकपॉइंट्स सेट करने में आसानी के लिए gdb इंटीग्रेशन के लिए एक गरीब आदमी की विम है।

इसे भी देखें: https://stackoverflow.com/questions/3536600/do-you-debug-c-code-in-vim-how


3

हालांकि तकनीकी रूप से नहीं। cgdb, gdb का एक शाप संस्करण है जिसमें vim-like कीबाइंडिंग होती है। यह वर्षों के लिए मेरा गोटो डिबगर है:

https://cgdb.github.io/

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