दिलचस्प पोस्ट
फ़ंक्शन से सेट ऑफ रिक रिकार्ड (आभासी तालिका) एक HTTP POST करने और प्रतिक्रिया लेने का सरल उदाहरण C Android पर SQLite डेटाबेस का सरल निर्यात और आयात मोंगो डीबी रेगेक्स खोजक मूल्य पर खोजें UITableView की पृष्ठभूमि को स्पर्श करके कीबोर्ड को खारिज करें DELETE व्यवहार पर MySQL का डिफ़ॉल्ट क्या है? एंड्रॉइड स्टूडियो में मैं निर्भरता वाले पेड़ कैसे दिखाऊँ? सी ++ में, आभासी आधार वर्ग क्या है? जावास्क्रिप्ट में ट्रिम () का सबसे अच्छा तरीका क्या है सी # में पिक्सेल स्तर पर छवियों को कैसे हेरफेर करने के लिए आईएसओ प्रोलॉग की जटिलता का अनुमान है Eigen और std :: वेक्टर मैं बेस 64 एन्कोड एक स्ट्रिंग कुशलतापूर्वक Excel VBA का उपयोग कैसे कर सकता हूँ? एंड्रॉइड स्टूडियो: पुस्तकालय के रूप में जार जोड़ें? @ फॉन्ट-चेहरे फोंट लोड किए जाने पर जानने के लिए jQuery का उपयोग करना?

जीडीबी – पाइप के साथ डीबगिंग

कहो कि मेरे पास दो कार्यक्रम हैं जिनके नाम ब्ला और रिट हैं । मैं blah प्रोग्राम को डिबग करना चाहता हूं जो कि I / O रीडायरेक्शन के माध्यम से रिट प्रोग्राम से इनपुट प्राप्त करता है। मैं gdb का उपयोग करते हुए निम्नलिखित मामले में blah प्रोग्राम को डिबग कैसे कर सकता हूं?

bash> ret | blah 

Solutions Collecting From Web of "जीडीबी – पाइप के साथ डीबगिंग"

सबसे पहले, आप प्रोग्राम को चला सकते हैं और इसे pid द्वारा डीबग कर सकते हैं। यह समाधान, बिल्कुल, सभी मामलों को शामिल नहीं करता है।

एक अन्य तरीका अंतर-प्रक्रिया संचार के लिए लिनक्स क्षमताओं का उपयोग करना है संक्षेप में, आप एक फीफा विशेष फ़ाइल ("नामित पाइप") में ret की आउटपुट को रीडायरेक्ट करते हैं और फिर डीबगर के माध्यम से उस फीफा से पढ़ें। यहां बताया गया है कि यह कैसे किया जाता है। बैश से, चलाएं:

 mkfifo foo 

यह आपकी निर्देशिका में एक विशेष फ़ाइल बनाता है जो एक नामित पाइप के रूप में काम करेगा। जब आप इस फ़ाइल में टेक्स्ट लिखते हैं (एक ही वाक्यविन्यास echo "Hello" >foo ) का प्रयोग करते हैं, तो लेखन प्रोग्राम ब्लॉक होगा जब तक कोई फ़ाइल से डेटा पढ़ा न जाए ( cat <foo , उदाहरण के लिए)। हमारे मामले में, एक gdb- नियंत्रित प्रक्रिया इस फाइल से पढ़ा जाएगा।

एक फीफो बना लेने के बाद, बैश से चलाएं:

 ret > foo & # ampersand because it may block as nobody is reading from foo gdb blah 

उसके बाद, जीडीबी प्रॉम्प्ट में, रन करें

 run <foo 

और इच्छित प्रभाव प्राप्त करें ध्यान दें कि आप फीफो से डेटा (और साथ ही सामान्य पाइप से) दो बार नहीं पढ़ सकते हैं: जब आप सभी डेटा पढ़ते हैं, तो blah प्रक्रिया मर जाती है और आपको कमांड को फू लिखना चाहिए (आप इसे कर सकते हैं अन्य शेल खिड़की से)

जब आप पूरा कर लें, तो rm foo एफू के साथ फीफो को निकालें (या उसे उस निर्देशिका में रखें जहां सिस्टम रिस्टार्ट पर स्वचालित रूप से निकाल दिया जाए, जैसे कि /tmp )।

जीडीबी का run कमांड रीडायरेक्शन करने के लिए bash का उपयोग करता है। के बराबर हासिल करने का एक आसान तरीका। ret | blah ret | blah की प्रक्रिया की प्रतिस्थापन सुविधा का उपयोग करना है।

 $ gdb blah ... (gdb) run < <(ret) 

स्पष्टीकरण: /dev/fd/123 जैसे कुछ के साथ bash विकल्प <(ret) /dev/fd/123 , जो ret के stdout के एक फ़ाइल विवरणक है हम उस एफडी का उपयोग उसी तरह नामित फीफो के रूप में कर सकते हैं जैसा कि दूसरे उत्तर में वर्णित है, सिवाय इसके कि हमें मैन्युअल रूप से इसे स्वयं बनाने की आवश्यकता नहीं है, न ही ret प्रक्रिया के जीवनकाल के बारे में चिंता करें।