सबसे पहले, आप प्रोग्राम चला सकते हैं और इसे पिड द्वारा डीबग कर सकते हैं। यह समाधान, ज़ाहिर है, सभी मामलों को कवर नहीं करता है।
एक और तरीका इंटर-प्रोसेस संचार के लिए लिनक्स क्षमताओं का उपयोग करना है। संक्षेप में, आप ret
के आउटपुट को फीफो विशेष फ़ाइल ("नामित पाइप") पर रीडायरेक्ट करते हैं और फिर उस एफआईएफओ से डीबगर के माध्यम से पढ़ते हैं। यहां बताया गया है कि यह कैसे किया गया है। बैश से, चलाएँ:
mkfifo foo
यह है कि एक नामित पाइप रूप में काम करेगा आपके निर्देशिका में एक विशेष फ़ाइल बनाता है। जब आप इस फ़ाइल में टेक्स्ट लिखते हैं (उसी वाक्यविन्यास echo "Hello" >foo
का उपयोग करके), लेखन प्रोग्राम तब तक अवरुद्ध होगा जब तक कोई फ़ाइल से डेटा (cat <foo
, उदाहरण के लिए) पढ़ता है। हमारे मामले में, इस फ़ाइल से एक जीडीबी नियंत्रित प्रक्रिया पढ़ी जाएगी।
के बाद आप एक फीफो, बैश से चलाने बनाया:
ret > foo & # ampersand because it may block as nobody is reading from foo
gdb blah
फिर, gdb प्रॉम्प्ट में, चलाने
run <foo
और वांछित प्रभाव मिलता है। ध्यान दें कि आप फीफो (साथ ही सामान्य पाइप से) डेटा को दो बार पढ़ नहीं सकते हैं: जब आपने सभी डेटा पढ़ लिया है, तो blah
प्रक्रिया मर जाती है और आपको foo को कमांड लिखना दोहराया जाना चाहिए (आप इसे कर सकते हैं अन्य खोल खिड़की से)।
जब आप पूरा कर लें, तो rm foo
के साथ फीफो को हटा दें (या इसे उस निर्देशिका में रखें जहां इसे सिस्टम पुनरारंभ पर स्वचालित रूप से हटा दिया जाएगा, जैसे /tmp
)।
स्रोत
2009-09-21 19:25:38
यह अलग है: http://stackoverflow.com/questions/4521015/how-to-pass-arguments-and-redirect-stdin-from-a-file-to-program-run-in-gdb –