2010-12-23 10 views
203

मैं आमतौर पर एक प्रोग्राम चलाता हूं:तर्क कैसे पास करें और gdb में प्रोग्राम से प्रोग्राम में stdin को रीडायरेक्ट करें?

./a.out arg1 arg2 <file 

मैं gdb का उपयोग करके इसे डीबग करना चाहता हूं।

मुझे set args कार्यक्षमता के बारे में पता है, लेकिन यह केवल gdb प्रॉम्प्ट से काम करता है।

उत्तर

130

gdb के भीतर से run कमांड के लिए तर्क पास करें।

$ gdb ./a.out 
(gdb) r < t 
Starting program: /dir/a.out < t 
+2

'r' 'रन' के लिए छोटा है और आप किसी भी तर्क के साथ इसका अनुसरण कर सकते हैं। इस प्रश्न की तरह, यह होगा: 'r arg1 arg2 phyatt

+0

मेरे लिए यह काम नहीं करता है। तब मैंने '$ gdb।/A.out' फिर' (gdb) r mysticTot

406

आप ऐसा कर सकते हैं:

gdb --args path/to/executable -every -arg you can=think < of 

जादू सा जा रहा है --args

डीबगिंग शुरू करने के लिए gdb कमांड कंसोल में बस run टाइप करें।

+23

मैंने सोचा कि मैं पहले यह गलत पढ़ रहा था; अजीब है कि --args निष्पादन योग्य से पहले चला जाता है। लेकिन ऐसा ही है! –

+8

@ कोओलिन --args निष्पादन योग्य से पहले आना चाहिए क्योंकि यह जीडीबी के लिए एक स्विच है। यदि यह बाद में आया, तो gdb इसे उस तर्क से कैसे अलग करेगा जिसे आप निष्पादन योग्य में पास करना चाहते हैं जिसे आप डिबगिंग कर रहे हैं? – codehippo

+8

@codehippo: ठीक है, अगर आपने '--args' निर्दिष्ट नहीं किया है तो निष्पादन योग्य को पास किया गया कोई भी तर्क _aren't_ नहीं है, इसलिए यह शायद ही अस्पष्ट है। –

1

अपनी परियोजना पर जीडीबी शुरू करें।

  1. प्रोजेक्ट निर्देशिका पर जाएं, जहां आपने पहले ही प्रोजेक्ट निष्पादन योग्य संकलित किया है। आदेश gdb और नीचे के रूप में निष्पादन के नाम जारी करें:

    gdb projectExecutablename

यह gdb शुरू होता है, तो निम्न प्रिंट: जीएनयू gdb (उबंटू 7.11.1-0ubuntu1 ~ 16.04) 7.11। 1 कॉपीराइट (सी) 2016 फ्री सॉफ्टवेयर फाउंडेशन, इंक .................................... ............. "शब्द" से संबंधित आदेशों की खोज के लिए "apropos शब्द" टाइप करें ... projectExecutablename से प्रतीकों को पढ़ना ... किया गया। (gdb)

  1. अपना प्रोग्राम चलाने से पहले, आप अपने ब्रेकपॉइंट्स सेट अप करना चाहते हैं। ब्रेक कमांड आपको ऐसा करने की अनुमति देता है। मुख्य नामित समारोह की शुरुआत में एक ब्रेकपाइंट सेट करने के लिए:

    (gdb) ख मुख्य

  2. एक बार जब आप (gdb) संकेत दिया है, रन कमांड निष्पादन योग्य चल रहा शुरू होता है। यदि आपके द्वारा डिबगिंग किए जाने वाले प्रोग्राम के लिए किसी कमांड-लाइन तर्क की आवश्यकता होती है, तो आप उन्हें रन कमांड में निर्दिष्ट करते हैं।

    (gdb) आर मुलडर/XFiles

: यदि आप "XFiles" फ़ाइल (जो परियोजना निर्देशिका में एक फ़ोल्डर "मुलडर" में है) पर अपने कार्यक्रम चलाने के लिए चाहते हैं, तो आप निम्न कर चाहते हैं

उम्मीद है कि इससे मदद मिलती है।

अस्वीकरण: यह समाधान मेरा नहीं है, इसे https://web.stanford.edu/class/cs107/guide_gdb.html से अनुकूलित किया गया है, जीडीबी के लिए यह छोटी सी मार्गदर्शिका स्टैनफोर्ड विश्वविद्यालय में विकसित की गई थी।

3

आप पुनर्निर्देशन और तर्क के साथ अपने कार्यक्रम पर अमल करने gdb में नंगे run आदेश करना चाहते हैं, तो आप set args उपयोग कर सकते हैं:

% gdb ./a.out 
(gdb) set args arg1 arg2 <file 
(gdb) run 

मैं --args पैरामीटर, gdb जमकर पलायन के साथ समान व्यवहार को प्राप्त करने में असमर्थ था पुनर्निर्देशन, यानी

% gdb --args echo 1 2 "<file" 
(gdb) show args 
Argument list to give program being debugged when it is started is "1 2 \<file". 
(gdb) run 
... 
1 2 <file 
... 

यह एक वास्तव में gdb ही के इनपुट पुनर्निर्देश, नहीं क्या हम वास्तव में यहाँ चाहते

% gdb --args echo 1 2 <file 
zsh: no such file or directory: file 
संबंधित मुद्दे

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