2009-03-27 15 views
17

कोई दिखाएगा कि कौन सी रेखा संख्या त्रुटि उत्पन्न करती है और यह भी संभव है कि .NET इसके .exes को संकलित करता है?अपवाद हैंडलिंग में लाइन नंबर दिखाएं

यदि अपवाद के लिए कोई स्वचालित तरीका नहीं है। उप-प्रदर्शन को प्रदर्शित करने के लिए संदेश?

try 
{ 
    int x = textbox1.Text; 
} 
catch(Exception ex) 
{ 
    MessageBox.Show(ex.Message); 
} 
+0

यह कोड भी संकलित कैसे करता है? –

+5

यह मैंने इसे उदाहरण के रूप में दिखाने के लिए नहीं बनाया है – Crash893

+0

संभावित डुप्लिकेट http://stackoverflow.com/questions/8338495/how-to-get-error-line-number-of-code-using-try-catch –

उत्तर

44

पूर्ण स्टैक ट्रेस प्राप्त करने के लिए ex.ToString() का उपयोग करें।

लाइन नंबर प्राप्त करने के लिए आपको रिलीज मोड में भी डिबगिंग प्रतीकों (.pdb फ़ाइलें) के साथ संकलित करना होगा (यह प्रोजेक्ट बिल्ड गुणों में एक विकल्प है)।

+3

पीडीबी फाइलों और लाइन संख्याओं के लिए +1 –

+1

यदि यह एक वेब प्रोजेक्ट है और आप सर्वर पर पीडीबीएस को तैनात करना चाहते हैं - पैकेज/प्रकाशित वेब अनुभाग में प्रोजेक्ट विकल्पों में "जेनरेट डीबग प्रतीकों को छोड़ दें" अनचेक करें। –

+0

क्या कोई "डिबगिंग प्रतीकों के साथ संकलित" पर स्पष्टीकरण प्रदान कर सकता है? मेरी परियोजना में 'डेब्यूज निरंतर परिभाषित करें', 'ट्रैस स्थिर परिभाषित करें', और 'डीबग जानकारी: पूर्ण' है, और मुझे लाइन नंबर नहीं मिल रहे हैं। एमएसडीएन कहता है, "प्रॉपर्टी पेज के बाएं फलक में बिल्ड टैब पर क्लिक करें, फिर उन कंपाइलर सेटिंग्स के लिए चेक बॉक्स का चयन करें जिन्हें आप सक्षम करना चाहते हैं। उन सेटिंग्स के लिए चेक बॉक्स साफ़ करें जिन्हें आप अक्षम करना चाहते हैं।" सहायक। – omJohn8372

4

यदि आप 'StackTrace' का उपयोग करते हैं और कार्यशील निर्देशिका में .pdb फ़ाइलों को शामिल करते हैं, तो स्टैक ट्रेस में लाइन संख्याएं होनी चाहिए।

25

किसी दिए गए अपवाद के लिए स्टैकट्रेस देखने के लिए, का उपयोग e.StackTrace

आप अधिक विस्तृत जानकारी की जरूरत है, तो आप System.Diagnostics.StackTrace वर्ग का उपयोग कर सकते हैं (यहाँ कुछ कोड आप का प्रयास करने के लिए है):

try 
{ 
    throw new Exception(); 
} 
catch (Exception ex) 
{ 
    //Get a StackTrace object for the exception 
    StackTrace st = new StackTrace(ex, true); 

    //Get the first stack frame 
    StackFrame frame = st.GetFrame(0); 

    //Get the file name 
    string fileName = frame.GetFileName(); 

    //Get the method name 
    string methodName = frame.GetMethod().Name; 

    //Get the line number from the stack frame 
    int line = frame.GetFileLineNumber(); 

    //Get the column number 
    int col = frame.GetFileColumnNumber(); 
} 

यह केवल तभी काम करेगा जब असेंबली के लिए कोई पीडीबी फ़ाइल उपलब्ध हो। प्रोजेक्ट गुण देखें - टैब बनाएं - उन्नत - डीबग जानकारी चयन यह सुनिश्चित करने के लिए कि कोई पीडीबी फ़ाइल है।

+0

आपको पहला स्टैक फ्रेम क्यों मिलेगा? क्या आप अंतिम स्टैक फ्रेम में दिलचस्पी नहीं लेना चाहते हैं? यानी स्टैकफ्रेम फ्रेम = st.GetFrame (st.FrameCount - 1) –

+0

मैंने इसे डब्ल्यूसीएफ वेब सेवा में उपयोग करने का प्रयास किया और यह जो लाइन नंबर लौटाता है वह हमेशा 0 होता है। यह डीडीबीबी फाइल में मौजूद है। –

1
string lineNumber=e.StackTrace.Substring(e.StackTrace.Length - 7, 7); 
संबंधित मुद्दे