GDB एक अलग GDB/एमआई बुलाया स्वचालित कार्यक्रमों के साथ बातचीत के लिए 'भाषा' है (विस्तृत here) , लेकिन दुर्भाग्यवश, ऐसा लगता है कि यह सशर्तयों का समर्थन नहीं करता है, और अन्य कार्यक्रमों से पार्सिंग और ब्रांचिंग के साथ चलाने की उम्मीद है। तो, ऐसा लगता है कि अपेक्षा सबसे आसान (या कम से कम एक काम) समाधान है:
$ cat gdbrunner
#!/usr/bin/expect -f
#spawn gdb -return-child-result --args ./mkfs.cpfs /dev/loop0
spawn gdb -return-child-result --args [lindex $argv 0]
#send "start\n"
#send "b cpfs_log if level >= WARNING"
send "run\n"
expect {
normally\. { send "quit\n" }
"exited with code" { interact -nobuffer }
}
मैं साधारण कार्यक्रम के साथ इस परीक्षण किया:
$ cat prog1.c
int main(void) { return 0; }
$ cat prog2.c
int main(void) { return 1; }
निम्न परिणाम के साथ
:
$ ./gdbrunner ./prog1
spawn gdb -return-child-result --args ./prog1
run
(gdb) run
Starting program: /home/foo/prog1
Program exited normally.
(gdb) quit
$ ./gdbrunner ./prog2
spawn gdb -return-child-result --args ./prog2
run
(gdb) run
Starting program: /home/foo/prog2
Program exited with code 01.
(gdb)
अनिवार्य रूप से, आपको किसी और चीज का उपयोग करके आउटपुट और शाखा को पार्स करना होगा। यह निश्चित रूप से किसी अन्य प्रक्रिया के इनपुट/आउटपुट को संभालने में सक्षम किसी भी अन्य कार्यक्रम के साथ काम करेगा, लेकिन उपर्युक्त उम्मीद स्क्रिप्ट आपको शुरू करनी चाहिए, अगर आपको टीसीएल पर कोई फर्क नहीं पड़ता है। यह थोड़ा बेहतर होना चाहिए, और पहले (gdb) प्रॉम्प्ट की अपेक्षा करें, लेकिन stdin buffering के कारण काम करता है।
आप जीडीबी/एमआई इंटरफ़ेस का उपयोग जीडीबी को -i कमांड-लाइन तर्क के साथ संशोधित करने के लिए भी संशोधित कर सकते हैं; इसके आदेश और आउटपुट थोड़ा अधिक आसानी से पारदर्शी हैं, यदि आप पहले से जुड़े दस्तावेज़ों में देख सकते हैं, तो आप अधिक उन्नत सुविधाओं की आवश्यकता के लिए विस्तार करेंगे।
स्रोत
2010-09-18 08:34:43
वहाँ एक उपयोगी जवाब के साथ एक नकली Stackoverflow सवाल है।कॉम/ए/8657833/431087 –