2012-05-04 3 views
12

मैं जीडीबी बार-बार के साथ निष्पादन योग्य चलाने का तरीका समझने की कोशिश कर रहा हूं और प्राथमिक रूप से त्रुटियों पर रोक लगाता हूं।एक निष्पादन योग्य फ़ाइल पर बार-बार जीडीबी चलाएं (और क्रैश/त्रुटियों पर रोकें)

मुझे मैन्युअल में ऐसा करने का कोई तरीका नहीं मिला!

धन्यवाद

उत्तर

13

मैं (बैश में) की कोशिश की:

while true ; do gdb -ex run a.out -ex quit ; done ; 

दुर्भाग्य से, इस बंद को मारने के लिए नहीं बल्कि मुश्किल साबित हुआ है, लेकिन यह चल रहा है को स्वचालित किया था, और जब कार्यक्रम दुर्घटनाग्रस्त (मैंने एक पुराने कार्यक्रम के साथ परीक्षण किया जो एसआईजीएबीआरटी का कारण बनता है), जीडीबी पूछता है "कार्यक्रम चल रहा है। वैसे भी बाहर निकलें? (वाई या एन)", तो बस एन दबाएं।

+0

बस इस की कोशिश की। इसे मारने के लिए बस 'ctrl-Z' दबाएं और फिर '% [नौकरी संख्या] मार दें'। नौकरी संख्या की जांच के लिए आप 'नौकरियां' का उपयोग कर सकते हैं। सत्य होने पर –

+0

; gdb -ex चलाएं a.out -ex को छोड़ दें; नींद 0.2; किया हुआ ; –

2

gdb repedatedly को चलाने के लिए एक खोल स्क्रिप्ट का उपयोग करें, और कहा कि बस शब्द run कार्यक्रम चलाने के लिए है एक कमांड फ़ाइल निर्दिष्ट करने के लिए gdb को --batch -x <cmdfile> विकल्पों का उपयोग करें। इस तरह तो कुछ:

$ echo run > cmdfile ; while gdb --batch -x cmdfile myprogram ; do : ; done 
6

मैं इसी समस्या में भाग गया, और मुझे लगता है कि बीओबीटीफ़िश ने सुझाए गए अनंत लूप को रोकने का एक अच्छा तरीका है। while true पाशन के

इसके बजाय, आप पाश, जैसे नियंत्रित करने के लिए एक डमी फ़ाइल के अस्तित्व का उपयोग कर सकते हैं:

touch loopfile; while [ -f loopfile ] ; do gdb -ex run a.out -ex quit ; done ; 

आप अपने अनंत डिबगिंग सत्र बंद करना चाहते हैं, तो आप या तो में एक नया टर्मिनल खोल सकते हैं

^CQuit 
A debugging session is active. 

    Inferior 1 [process 11136] will be killed. 

Quit anyway? (y or n) n 
Not confirmed. 
(gdb) shell rm loopfile 
(gdb) quit 
A debugging session is active. 

    Inferior 1 [process 11136] will be killed. 

Quit anyway? (y or n) y 

Hopef: एक ही निर्देशिका और rm loopfile, या आप control-c साथ दखल और फिर gdb के भीतर से loopfile को हटा कर एक ही टर्मिनल से बाहर निकल सकते हैं उलझन में यह भविष्य में किसी के लिए उपयोगी है, यह अड़चन समस्याओं को डीबग करने का एक अच्छा (अगर हैकिश) तरीका लगता है।

0

लूप + एलडी पथ + कमांड लाइन आर्ग उदाहरण

for i in {0..99}; do LD_LIBRARY_PATH=/some/path/to/libs gdb -ex 'set args arg1 arg2 arg3' -ex run ./execName -ex quit ; done 
संबंधित मुद्दे