2010-08-23 17 views
18

में इनपुट पुनर्निर्देशन मैं stdin को इनपुट पुनर्निर्देशन के साथ प्रोग्राम चलाने के लिए gdb प्राप्त करने का प्रयास कर रहा हूं। उदाहरण के लिए, gdb के बिना मैं इस तरह के कार्यक्रम चलाने होगा:जीडीबी (मिनजीडब्लू)

prog < input.txt 

अब gdb में, यह करने के लिए हमेशा की तरह run < input.txt है। हालांकि, यह मेरे लिए काम नहीं करता है और ऐसा करने पर कुछ भी stdin में रीडायरेक्ट नहीं हो जाता है।

मैं मिनीजीडब्ल्यू के साथ विंडोज का उपयोग कर रहा हूं। क्या समस्या हो सकती है?

उत्तर

2

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

उदा। Stdout के बजाय ifile से आउटपुट लिखने के लिए stdin के बजाय ifile से इनपुट प्राप्त करने के लिए argc और argv का उपयोग करके "-i ifile" तर्क का विश्लेषण करना और "-oile" को पार्स करना।

फिर मैं केवल उन तर्कों का उपयोग रीडायरेक्ट के बजाय करता हूं।

MinGW के साथ आने वाले टूल अक्सर नवीनतम संस्करण नहीं होते हैं और अक्सर सुविधाओं को छोड़ दिया जाता है। :: shrug ::

12

देर से '9 0 के दशक के रूप में, टूटा कमांड लाइन पुनर्निर्देशन known and assumed limitation था। मेरा संदेह यह है कि यह उस तरह से बना रहता है, क्योंकि mingw32gdb का बंदरगाह अभी भी बहस से सभी run तर्क (रीडायरेक्ट सहित) शब्दशः पर गुजरता है।

कई संभावित समाधानों:

  1. अगर आप कमांड लाइन इंटरफेस को बदलने के लिए विकल्प होता है, तो, bbadour के सुझाव को लागू
  2. अन्यथा यदि आप आसानी से बात आप करना चाहते हैं इससे पहले कि प्रक्रिया को निलंबित कर सकते हैं पर डिबग, debugee एक खोल से आह्वान (पुनर्निर्देशन के साथ) और इसे करने के लिए देते हैं, जबकि यह पहले से ही अन्यथा
  3. चल रहा है, यदि आप debugee (gcc -g) के लिए प्रतीक है या आप main() (gcc -Wl,-Map,mapfile) का पता जानते हैं और वहाँ एक ब्रेकपाइंट सेट कर सकते हैं, निम्नलिखित तरीके (mingw gdb 6.8.0 के साथ परीक्षण) में आगे बढ़ना:

    # gdb debugee.exe 
    (gdb) b main 
    (gdb) run non-redirect-arguments-if-any 
    (gdb) p dup2(open("/tmp/input.txt", 0), 0) 
    (gdb) c 
    
+0

मैं ओ पी के रूप में एक ही समस्या में चल रहा हूँ। हालांकि, मैं अपने लिए काम करने का तीसरा समाधान पाने में असमर्थ हूं। यह 'gdb 7.5.50' पर है। दूसरा समाधान कैसे काम करता है? आप कैसे सुनिश्चित करते हैं कि जब डीबग शुरू हो जाए, तो यह आपके पास जीडीबी संलग्न करने का मौका मिलने से पहले पूरा होने के लिए नहीं चलता है? – greatwolf