2012-01-27 15 views
12

का उपयोग कर पुनर्निर्देशन ऐसा लगता है कि gdb में इनपुट पुनर्निर्देशन Cygwin में काम नहीं करता, उदा,gdb इनपुट cygwin

(gdb) run < input.txt 

वहाँ Cygwin की gdb में इनपुट रीडायरेक्ट करने के लिए अन्य रास्ता नहीं है ??

+3

यह Cygwin की एक सीमा है, वहाँ विभिन्न समाधान है कि के लिए, तो आप इस संबंधित सवाल के समाधान की कोशिश कर सकते है: http://stackoverflow.com/questions/3544325/input-redirection-in-gdb-mingw – speedblue

उत्तर

12

दुर्भाग्य से साइगविन में gdb चलाते समय यह संभव नहीं है। bug एक उद्धरण के लिए लंबे समय तक मौजूद है, लेकिन स्पष्ट रूप से यह ठीक करना मुश्किल है - और शायद जीडीबी देव अधिक सामान्य वातावरण (जैसे कि लिनक्स) के लिए प्रासंगिक सुविधाओं/मुद्दों पर समय बिताना पसंद करते हैं।

कई संभावित कामकाज हैं; मैं पहली बार पसंद करता हूं क्योंकि यह सिग्विन पर डिबगिंग/चलने के दौरान सबसे साफ और उपयोगी भी है:

  • कमांड लाइन तर्क जोड़ें, उदा। -f whateverwhatever से पढ़ने के लिए फ़ाइल नाम होने के साथ। यदि तर्क मौजूद नहीं है या - पर सेट है, तो stdin से पढ़ें। -f - विकल्प निश्चित रूप से वैकल्पिक है लेकिन फाइलनामों को स्वीकार करने वाले तर्कों के लिए - को "stdin/out" के रूप में संभालने के लिए यह एक सामान्य मानक है (जब तक यह समझ में आता है)।
  • उपयोग gdb हैक here उल्लेख आवेदन के अंदर एक मैन्युअल रूप से खोला फाइल करने के लिए stdin पुन: मैप करने के लिए:

    > gdb yourexecutable 
    (gdb) break main 
    (gdb) run 
    (gdb) call dup2(open("input.txt", 0), 0) 
    (gdb) continue 
    

    यह main समारोह पर एक ब्रेकपाइंट सेट है, तो प्रोग्राम है जो सही main प्रवेश करने के बाद टूट जाएगा निष्पादित करता है। फिर इनपुट फ़ाइल के फ़ाइल डिस्क्रिप्टर के साथ stdin fd (0) को प्रतिस्थापित करने के लिए dup2 का उपयोग किया जाता है।