2009-03-10 8 views
119

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

अद्यतन:

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

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

कार्य समाधान

लाइन नंबर समस्या का समाधान हो प्रत्येक आवेदन के लिए pdb फ़ाइल नियोजित करना।

उत्तर

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

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

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

क्या मुझे पीडीबी फाइल को असेंबली के साथ तैनात करना है? –

+7

हां। यही वह जगह है जहां डीबग प्रतीकों और रेखा संख्याएं हैं। –

+4

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

3

अपने निर्माण/तैनाती पैकेज के साथ डीबग प्रतीकों को शामिल करें।

1

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

+0

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

13

मेरा समाधान

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

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

इस

कारण

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

7

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

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

बस एक विचार।

+0

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

+0

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

15

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

-3

यह हर बार काम करता है। आपको केवल स्टैक ट्रेस संदेश को प्रतिस्थापित करने की आवश्यकता है। असली आसान! इसके अलावा, 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 

सी # संस्करण:

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++; 
} 
+0

का उपयोग करने का दर्द नहीं लेते हैं, हाँ असली असली प्रारूपित नहीं किया गया .. इसके बारे में खेद है –

-2

try { // your method } catch (Exception ex) { // log-> ex.ToString(); // it will give you whole exception including line number and
// file name }
प्लस तैनाती में (बिन फ़ोल्डर से) .pdb फ़ाइल शामिल पाने के लिए पूरे अपवाद अन्य बुद्धिमान यह जहां अपवाद तब होता है केवल विधि नाम दिखाई देगा।

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