2012-01-03 24 views
17

के तहत मृत कोड का अर्थ क्या है, हम अपने वेब अनुप्रयोग विकास के लिए ग्रहण हेलीओस आईडीई का उपयोग कर रहे हैं। ग्रहण में समस्या अनुभाग के तहत, कुछ पंक्तियों के लिए विवरण "मृत कोड" के रूप में प्रदर्शित होता है।ग्रहण आईडीई समस्या अनुभाग

क्या कोई मुझे बता सकता है कि मृत कोड वास्तव में क्या मतलब है?

कृपया अपने संदर्भ के लिए स्क्रीन शॉट देखें।

enter image description here

उदाहरण के लिए इस भाग ग्रहण

else { 
     int length; 
     if (ar != null) 
      length = Array.getLength(ar); 
     else 
      length = 0; // This line is dead code 
+1

मुमकिन है दे देंगे, क्योंकि यह साबित कर सकते हैं कि 'ar' कभी वहाँ शून्य होगा - अधिक कोड के बिना हम यह सुनिश्चित करने के लिए नहीं कह सकते हैं (लेकिन अन्यथा यह होगा एक बग और मैं ग्रहण कंपाइलर की तुलना में अपने कोड में बग की खोज करने के इच्छुक हूं;) – Voo

+0

बस ध्यान देने योग्य मूल्य - ग्रहण कभी-कभी यह गलत हो जाता है। मैंने ग्रहण नियॉन को कोड के लिए "मृत कोड" त्रुटि दी है जो संभवतः मृत नहीं है। –

उत्तर

35

के तहत मृत कोड के रूप में दिखाया गया है ग्रहण में, "मृत कोड" कोड है कि क्रियान्वित किया जा कभी नहीं होगा है। आम तौर पर यह एक सशर्त शाखा में है जो तर्कसंगत रूप से दर्ज नहीं किया जाएगा। यह अभी भी मान्य जावा है, क्योंकि,

boolean x = true; 
if (x) { 
    // do something 
} else { 
    // this is dead code! 
} 

यह एक त्रुटि नहीं है, लेकिन यह एक उपयोगी चेतावनी है, तार्किक स्थिति जटिल हैं विशेष रूप से अगर, और जहां यह नहीं हो सकता है:

एक तुच्छ उदाहरण होगा निम्नलिखित सहजता से स्पष्ट है कि कोड कभी निष्पादित नहीं किया जाएगा।

आपके विशिष्ट उदाहरण में, ग्रहण ने गणना की है कि ar हमेशा गैर-शून्य होगा, और इसलिए else length = 0 शाखा कभी निष्पादित नहीं की जाएगी।

और हाँ, यह संभव है कि ग्रहण गलत है, लेकिन यह अधिक संभावना है कि यह नहीं है।

+0

मैंने अपना प्रश्न संशोधित कर दिया है, मेरा सवाल है कृपया मुझे बताएं कि ग्रहण कैसे तय कर सकता है कि यह मृत कोड है ?? क्योंकि मेरी राय में ग्रहण सुझाव भी गलत पता हो सकता है ?? – Pawan

+0

@skaffman, क्या मृत कोड हटा दिया गया है ताकि यह बाइटकोड में दिखाई न दे? – Pacerier

+0

यह मुझे बचाया .... –

5

मृत कोड कोड है जो कभी निष्पादित नहीं किया जाएगा, उदा।

boolean b = true 
if (!b) { 
    .... 
    // dead code here 
} 
3

मृत कोड का अर्थ है कि इस कोड को निष्पादित करने का कोई तरीका नहीं है।

कभी कभी तुम भी यह संकलन नहीं कर सकते हैं (इस मामले :)

private Boolean dead_code() 
    { 
    return true; 
    //Dead code below: 
    dosomething(); 
    } 

लेकिन अन्य मामलों में यह भी स्पष्ट है, जैसे इस बयान की तरह:

b=true; 
    [...] 
    if (b==false) 
    { 
    //Dead code 
    } 

आप इस किया है संदेश, आपके कोड में कुछ प्रमुख दोष है। आपको इसे ढूंढना है, अन्यथा आपका ऐप इरादे से काम नहीं करेगा।

+0

मुझे आपका पहला उदाहरण पसंद है, लेकिन "वहां ** ** ** कुछ प्रमुख दोष" से असहमत हैं। यह जरूरी नहीं है, उदाहरण के लिए मैं अक्सर एक स्थिर बूलियन "डीबग" पैरामीटर का उपयोग करता हूं जो पैरामीटर को सत्य पर सेट करने पर ही कुछ कोड निष्पादित करेगा। रिलीज के लिए मैं पैरामीटर को गलत में बदलता हूं और नतीजतन मुझे बहुत से मृत कोड चेतावनियां मिलती हैं क्योंकि "डीबग" कोड भागों को कभी भी निष्पादित नहीं किया जाएगा। – THelper

+0

आप सही हैं, मैंने इस मामले के बारे में नहीं सोचा था। यह वास्तव में बहुत सारे मृत कोड का परिणाम होगा। – Force

1

दो प्रकार के डायग्नोस्टिक्स हैं जो एक्लिप्स कोड को चिह्नित करने के लिए बाहर निकलता है जो रनटाइम पर निष्पादित नहीं किया जाएगा। 1) पहुंचने योग्य कोड: ये सामान्य जावा चेतावनियां हैं जो जेएलएस के पहुंचने योग्य नियमों का पालन करती हैं, और जावैक द्वारा भी दी जाती हैं। ये संकलन त्रुटियों के लिए हैं। उदाहरण:

int foo() { 
     return 1; 
     int i = 1; // Unreachable 
    } 
    int foo2() { 
    while (true); 
    int i =1; //Unreachable 
    } 

रहे हैं अन्य अधिक जटिल उदाहरण :)

2) मृत कोड: इस ग्रहण की अपनी स्थिर विश्लेषण चेतावनी है, और ज्यादातर अशक्त विश्लेषण अर्थात से बाहर बंधे होते हैं

void foo() { 
    Object o = null; 
    if (o == null) { 
    } else { 
    // dead code 
    } 

ऊपर दिए गए उदाहरणों को मृत कोड चेतावनी नहीं देना चाहिए। अर्थात

boolean x = true; 
if (x) { 
    // do something 
} else { 
    // this is dead code! 
} 

क्योंकि JLS कम्पाइलर वेरिएबल के 'मान' का मूल्यांकन करने की मनाही है, चेतावनी नहीं देना चाहिए। सभी कि हम मूल्यांकन कर सकते हैं 'nullness'

आशा इस मदद करता है

1

आप "डेड कोड" लाइनों के ऊपर लाइनों में एक नल पॉइंटर एक्सेप्शन हो सकने वाली है। सुनिश्चित करें कि आप "शून्य सूचक" अपवाद की जांच करें।

+0

मैं यह भी कहूंगा: आपके पास एक कंपाइलर स्पष्ट नल पॉइंटर अपवाद हो सकता है :), यानी एक शर्त यदि आपका कोड निश्चित रूप से लाइन पर नल पॉइंटर अपवाद का कारण बनता है जिसने चेतावनी दी है कि संकलक भी इसे समझता है। – XMight

-1

इस प्रयास करें:

while (true) { 
    if(false == true) break; 

} 

S.O.P("I will never reach here!") <-- This code will never be executed. 

कोड मान्य है, क्योंकि यह संकलक के अनुरूप है, तथापि वास्तव में पाश कभी नहीं से बाहर निकलें, और प्रभाव में S.O.P क्रियान्वित किया जा कभी नहीं होगा होगा।

0

यह संभव है कि आपने पहले ar वैरिएबल का उपयोग किया हो। फिर संकलक जानता है कि अन्य कथन में रेखा कभी निष्पादित नहीं की जाएगी। या तो NullPointerException होगा जहां आपने ar का उपयोग किया था या if कथन का पहला भाग निष्पादित किया जाएगा।

0

मुझे मृत कोड के लिए कुछ जवाब दें।

उदाहरण के लिए:

public class UnreachableTest{ 

    public static void main(){ 

     try{ 
      // some code 
     } 
     catch(Exception exc){ 
      throw new NullPointerException(); 
      System.out.println("Unreachable line"); // compile time error 
     } 
    } 

} 
यहाँ

println ("नहीं पहुंचा जा सकता लाइन"); कभी निष्पादित नहीं किया जाता है। जो बदले में एक मृत कोड माना जाता है।

एक और उदाहरण हो सकता है:

int func(int i, int j) 
{ 
int sum = i + j; 
return i + j; // never actually using the sum 
} 

सरल समारोह रिटर्न मैं j +; वास्तव में वास्तव में योग का उपयोग नहीं करता है। योग को यहां मृत कोड माना जाता है।

0

ऐसा होने पर कुछ अन्य मामला।

System.out.println("result :" + result + ":" + result.isEmpty()); 
if (result == null) 
    return result; 
else if(!result.isEmpty()) 
    str.append(result + " "); 

1) यहाँ आप के रूप में आप परिणाम मुद्रण और जाँच isEmpty() ग्रहण हो जाती है तो यह में अगर नहीं जाना होगा कि परिणाम अशक्त नहीं है कर रहे हैं। तो वापसी परिणाम मृत कोड है।

2) अब कहते हैं कि परिणाम अशक्त आ रहा है तो आप result.isEmpty में NullPointerException() तो फिर मिल जाएगा यह अगर में नहीं जाना होगा और वापसी परिणाम जाने deadcode

यह काम सिर्फ सिस्टम बाहर टिप्पणी करने के लिए है। out.println()।

0

ग्रहण यह चेतावनी देता है यदि आप जो हालत जांच रहे हैं वह कभी संतुष्ट नहीं हो सकती है।निम्नलिखित कुछ उदाहरण

Object o=null; 
if(o!=null) { 
//Some code 

} 

यहाँ मृत कोड चेतावनी वस्तु के रूप में आ जाएगा पहले से ही अशक्त बना है कर रहे हैं

एक अन्य उदाहरण नीचे

BSTTest bstTest=null; 
bstTest.test=10; 
if(bstTest==null) { 
    //some code 

} 

यहाँ कोड का एक चर का उपयोग करने की कोशिश कर रहा है दिया जाता है कक्षा। चूंकि चर पहले से ही एक्सेस किया जा चुका है, ग्रहण मृत कोड चेतावनी देगा यदि (bstTest == null) के रूप में bstTest शून्य हो सकता है जब चर पहले से ही एक्सेस हो चुका है।

नोट: यहाँ bstTest.test नल पॉइंटर एक्सेप्शन

संबंधित मुद्दे