c - चन्द्र ग्रहण २०१८




डीबग फोर्क() में ग्रहण सीडीटी में (2)

मैं एक्लिप्स सीडीटी (जूनो) के साथ कुछ कांटा () तंत्र को डिबग करने की कोशिश कर रहा हूं। मैंने सी में कार्यक्रम लिखा था

  if( -1 == (pid = fork()) ) /* error */
    goto cleanup;
  else if ( 0 == pid ) /* child */
  {
    execlp("gcc", "gcc", cFilePath, "-o" , GCC_OUTPUT_FILE_NAME, NULL);
    goto cleanup; /* Arrives here only on error! */
  }
  else if (pid > 0) /* parent - checks: correct pid returns, returns normally, with exit status = 0*/
  {
      returnedpid = wait(exitStatus);
      if( pid != returnedpid || exitStatus == NULL || !WIFEXITED(*exitStatus) || !WEXITSTATUS(*exitStatus) )
          goto cleanup;
  }

मैंने " set follow-fork-mode child " को जोड़ने की कोशिश की, जैसा कि यहां बताया गया है: http://unix.derkeiler.com/Newsgroups/comp.unix.programmer/2006-02/msg00435.html

1. मैं कोड अनुभाग को डिबग कैसे कर सकता हूं (0==pid) ?

2. जब मैं प्रतीक्षा कथन प्राप्त करता हूं, तो डीबगर तुरंत वापस आ जाता है, क्या इंतजार नहीं है () बच्चे के रिटर्न तक निलंबित करने का अनुमान है? यह तुरंत क्यों लौटा है?


  1. डिबग कॉन्फ़िगरेशन विंडो में -> डीबगर -> चेक करें "स्वचालित रूप से फोर्क किए गए प्रक्रियाओं को डीबग करें"
  2. खुली ब्रेकपॉइंट विंडो -> मेनू देखें -> इवेंट ब्रेकपॉइंट सी / सी ++ जोड़ें -> "कांटा बुलाया"
  3. अब एक बार ईवेंट ब्रेकपॉइंट आ गया, F6 दबाएं - आप डिबग विंडो में नई प्रक्रिया देखेंगे
  4. नई प्रक्रिया चुनें और F6 दबाएं - आप बच्चे में हैं
  5. का आनंद लें

आपकी समस्याएं संभवत: "अलग-ऑन-फोर्क" होने के कारण बंद हो रही हैं। डीएसएफ इसे डिफ़ॉल्ट रूप से सेट करता है (यह भी जीडीबी का डिफ़ॉल्ट है)।

1) "execlp ..." और "returnpid = ..." के साथ लाइन पर एक ब्रेकपॉइंट रखें। 2) डिबग कॉन्फ़िगरेशन में "नॉन-स्टॉप मोड" और "स्वचालित रूप से डिबग फोर्केड प्रोसेस" सक्षम है। 3) डीबग सत्र प्रारंभ करें आप बच्चे या माता-पिता में एक ब्रेकपॉइंट मारेंगे। अब डीबग दृश्य देखें

आप देखेंगे कि आपके द्विआधारी दो धागे दिखाता है।

4) डिबग संदर्भ को स्विच करने के लिए एक या दूसरे पर क्लिक करें (ऊपर वाली छवि में मुख्य () के साथ रेखाएं)





eclipse-cdt