रिलीज़ मोड में .NET असेंबली के लिए Stack Trace में पंक्तियों की संख्या प्रदर्शित करें


139

क्या .NET असेंबली बिल्ड / रिलीज़ मोड में तैनात करने के लिए स्टैक ट्रेस में लाइनों को प्रदर्शित करने का एक तरीका है?

अपडेट करें:

मेरा आवेदन तीन वर्ग पुस्तकालय परियोजनाओं और एक ASP.NET "वेबसाइट" परियोजना में विभाजित है। मैं जिस त्रुटि को ट्रैक करने की कोशिश कर रहा हूं, वह तीन क्लास लाइब्रेरी प्रोजेक्ट्स में से एक में है। मैंने केवल क्लास लाइब्रेरी प्रोजेक्ट के लिए pdb फ़ाइल को तैनात किया है जो "ऑब्जेक्ट ऑब्जेक्ट के इंस्टेंस पर सेट नहीं" ऑब्जेक्ट जनरेट कर रहा है।

स्टैक ट्रेस में लाइन नंबर अभी भी दिखाई नहीं दे रहे हैं। क्या मुझे स्टैक ट्रेस में लाइन नंबर प्राप्त करने के लिए सभी परियोजनाओं के लिए pdb फ़ाइलों को तैनात करने की आवश्यकता है?

काम करने का उपाय

प्रत्येक एप्लिकेशन के लिए pdb फ़ाइल परिनियोजन करना पंक्ति संख्या समस्या को निर्धारित करता है।

जवाबों:


147
  • उस प्रोजेक्ट के लिए गुण विंडो में जाएं जहां आप स्टैक ट्रेस लाइन नंबर देखना चाहते हैं।
  • बिल्ड "वर्टिकल टैब" पर क्लिक करें।
  • "रिलीज़" कॉन्फ़िगरेशन चुनें। DEBUG निरंतर पैरामीटर की जाँच करें।
  • इनबिल्ट कोड के साथ सामयिक ट्रेस समस्या से बचने के लिए "ऑप्टिमाइज़ कोड" पैरामीटर को अनचेक करें (यह कदम आवश्यक नहीं है)।
  • उन्नत ... बटन दबाएं और आउटपुट चुनें -> डीबग जानकारी -> पीडीबी-ओनली।
  • असेंबली के साथ उत्पन्न। Pdb फ़ाइल परिनियोजित करें।

नीचे टिप्पणी के साथ लागू किया गया:

  • "पैकेज / पब्लिश वेब" खंड में जांच करने के लिए एक और बात यह है कि "उत्पन्न डिबग प्रतीक" चेकबॉक्स अनचेक किया गया है

2
क्या मुझे असेंबली के साथ pdb फ़ाइल को तैनात करना है?
बजे माइकल नॉर्केर्न

7
हाँ। यहीं पर डिबग सिंबल और लाइन नंबर हैं।
जॉन सॉन्डर्स

5
यदि आप नहीं चाहते हैं तो आप शायद इस जानकारी को उजागर नहीं करना चाहते हैं। क्लाइंट समस्या को डीबग करने के लिए इसका उपयोग करें, हाँ। लेकिन आप हमेशा ऐसा नहीं करना चाहते क्योंकि डिबगिंग जानकारी संवेदनशील डेटा को दूर कर सकती है और एक हमला वेक्टर हो सकती है। निर्भर करता है कि आपका ऐप क्या है।
इ_म_जॉर्फ़

6
@Carlo: डिबग जानकारी रिलीज (अनुकूलित) कोड के साथ भी काम करती है, हालांकि डिबगिंग कुछ सीमित है ( stackoverflow.com/questions/113866 )। हालांकि कॉलस्टैक्स अनुकूलित कोड में भी काफी विश्वसनीय हैं, इनलाइन कार्यों और महासागरीय स्थितियों को छोड़कर जहां टेल कॉल गायब हो सकती है क्योंकि कॉल xxx / ret अनुक्रम को jmp xxx से बदल दिया गया था।
सुमा

12
"पैकेज / पब्लिश वेब" खंड में जांच करने के लिए एक और बात यह है कि "उत्पन्न डिबग प्रतीक" चेकबॉक्स भी अनियंत्रित है
गाज़

17

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


या अगर यह एक डेस्कटॉप ऐप है, तो सुनिश्चित करें कि पीडीबी फ़ाइल तैनात है
सीएडी

15

मेरा समाधान

निष्पादन योग्य फ़ाइल उसी फ़ोल्डर में pdb फ़ाइल की प्रतिलिपि बनाएँ।

अब मैं exe फ़ाइल को चलाने पर लाइन नंबर देख सकता हूं।

यह कारण है

http://msdn.microsoft.com/en-us/library/ee416588%28v=vs.85%29.aspx


9

मैंने अतीत में समस्याओं में भाग लिया है जहां मुझे एक त्रुटि को ट्रैक करने के लिए रिलीज़ बिल्ड के साथ पीडीबी फ़ाइलों को तैनात करने की आवश्यकता महसूस होती है। कारण, जैसा आपने कहा, यह था कि अपवाद एक ऐसी विधि में हुआ था जो बहुत बड़ी थी और जहां यह हो रहा था, मैं उसे सटीक रूप से इंगित नहीं कर सकता था।

यह एक संकेत हो सकता है कि विधि को छोटे, अधिक दानेदार तरीकों में वापस करने की आवश्यकता है। एक आकार सभी उत्तर में फिट नहीं होता है, लेकिन इस दृष्टिकोण ने मुझे अल्पावधि में अच्छी तरह से सेवा दी है (मैंने अक्सर रिफैक्टिंग के दौरान बग पाया है) और लंबे समय में।

सिर्फ एक विचार।


यह। और जैसा कि आप जाते हैं, एक महीन अनाज पर अधिक स्केच स्थानों में कैच ट्राई करते हैं। और इन कार्यों की शुरुआत में गार्ड बढ़ाएं यदि धारणाएं बनानी हों।
गेरार्ड ओनील

अक्सर कहा जाता है और इतना सच है, हालांकि, विरासत है, नए बड़े तरीकों को लिखने वाले प्रोग्रामर हैं, और कभी-कभी एक बड़ी विधि वास्तव में सबसे अच्छी बात है (इसे अलग करना या YAGNI को विभाजित करना)। इसके अलावा, यहां तक ​​कि एक 5 पंक्ति विधि के लिए - आप अपनी खोज को 5x संकीर्ण करते हैं - इसलिए PDBs उत्पादन में एक आवश्यक बुराई हैं जब तक कि आप एक प्रतीक सर्वर का उपयोग करने का दर्द नहीं
उठाते हैं


0

वीएस 2008 एक्सप्रेस में, मैंने इसे प्रोजेक्ट प्रॉपर्टीज़ -> कंपाइल -> एडवांस्ड कंपाइल ऑप्शंस के तहत पाया।


1
आपको क्या मिला? यदि आप पूर्ण उत्तर पोस्ट नहीं करना चाहते हैं तो आप एक टिप्पणी पोस्ट कर सकते हैं।
जुमेक्सोज़ी

-4

यह हर बार काम करता है। आपको केवल स्टैक ट्रेस संदेश को प्रतिस्थापित करने की आवश्यकता है। असली आसान! इसके अलावा, vb.net में आपको "सभी फाइलें दिखाएं" और पीडीबी को शामिल करने की आवश्यकता है।

'Err is the exception passed to this function

Dim lineGrab As String = err.StackTrace.Substring(err.StackTrace.Length - 5)
Dim i As Integer = 0
While i < lineGrab.Length                   
    If (IsNumeric(lineGrab(i))) Then
        lineNo.Append(lineGrab(i))
    End If
    i += 1
End While

'LineNo holds the number as a string

C # संस्करण:

string lineGrab = error.StackTrace.Substring(error.StackTrace.Length - 5);

int i = 0;
int value;
while (i < lineGrab.Length)
{
    if (int.TryParse(lineGrab[i].ToString(), out value))
    {
        strLineNo.Append(lineGrab[i]);
    }
    i++;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.