2009-08-25 14 views
28

हम वर्तमान में क्लाइंट मशीनों पर स्थान बचाने और बैंडविड्थ डाउनलोड करने के लिए .pdb फ़ाइलों के बिना WinForms ऐप वितरित कर रहे हैं। जब हमें स्टैक निशान मिलते हैं, तो हमें विधि नाम मिल रहे हैं लेकिन रेखा संख्या नहीं। क्या .pdb फ़ाइलों को वितरित करने के बिना लाइन नंबर प्राप्त करने का कोई तरीका है?मैं पीडीबी के बिना स्टैक ट्रेस में लाइन नंबर कैसे शामिल कर सकता हूं?

उत्तर

33

आप पीडीबी को बंडल करते समय सीधे अपने आवेदन से लाइन नंबरों के साथ एक स्टैक ट्रेस नहीं प्राप्त कर सकते हैं। हालांकि, यदि आपके पास अपने ग्राहकों को भेजे गए ऐप के उसी संस्करण के लिए पीडीबी फाइलें हैं, और आपको कुछ प्रकाश स्क्रिप्टिंग नहीं है, तो आप .NET स्टैक ट्रेस और आईएल ऑफसेट को वापस चालू कर सकते हैं पंक्ति संख्याएँ।

अपनी निर्माण प्रक्रिया के दौरान, अपने उत्कृष्ट MDbg managed code debugger के हिस्से के रूप में वितरित Mike Stall's pdb2xml converter का उपयोग करें, और उन्हें कुछ स्थान सुरक्षित (उदा।, स्रोत नियंत्रण) स्टोर करें। जब आप क्लाइंट से वापस स्टैक ट्रेस प्राप्त करते हैं, तो आप प्रासंगिक डेटा नंबर निर्धारित करने के लिए XML डेटा से आईएल ऑफ़सेट से पूछ सकते हैं। यदि आपके स्टैक निशान किसी वेबसाइट पर सबमिट किए जाते हैं, तो आप रूपांतरण को स्वचालित भी कर सकते हैं, ताकि डेवलपर्स पहले से ही अपने इनबॉक्स को हिट करते समय पूरी तरह से विस्तृत स्टैक निशान प्राप्त कर सकें।

+0

क्या आप या किसी और ने नेट पर कहीं भी Pdb2Xml.exe डाल दिया है? मुझे लगता है कि यह अप्रबंधित कोड के लिए भी प्रयोग योग्य है, और मेरे पास सी # कंपाइलर नहीं है। लेकिन मुझे केवल स्रोत मिलते हैं। एक महान उपकरण लगता है। –

+0

दुर्भाग्यवश ये लिंक अब काम नहीं करते हैं। – Marc

8

नहीं। रेखा संख्या डीबगिंग जानकारी का हिस्सा हैं, जो केवल पीडीबी फ़ाइल में संग्रहीत है। यही कारण है कि पीडीबी फाइलें पहले स्थान पर मौजूद हैं।

+2

आपको पीडीबी फ़ाइल को * पीडीबी फाइल * में भेजने की ज़रूरत नहीं है। जब तक आप इसे निर्माण करते समय कहीं दूर ले जाते हैं, तब तक जब आप स्टैक ट्रेस प्राप्त करते हैं तो आप इसका उल्लेख कर सकते हैं। Http://stackoverflow.com/questions/1328836/include-line-numbers-in-stack-trace-without-pdb/1328915#1328915 – tghw

+0

हां, यह सच है। लेकिन आपको यह जानकारी प्राप्त करने के लिए पीडीबी फ़ाइल रखना है - क्योंकि वह संकलक द्वारा संग्रहीत किया जाता है। –

0

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

+0

मुझे बहुत यकीन है कि मैं पीडीबी फ़ाइल में उपस्थित होने की तुलना में आईएल ऑफ़सेट के बहुत छोटे संस्करण को लाइन संख्याओं में लिख सकता हूं। – Joshua

1

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

यदि आप अधिक जगह नहीं लेना चाहते हैं तो आप सीमित आकार लॉग फ़ाइलों का उपयोग कर सकते हैं, इस तरह केवल हालिया लॉग संदेश ही रखे जाएंगे।

हम लॉगिंग आवश्यकताओं के लिए लॉग 4नेट लाइब्रेरी का उपयोग करते हैं, मैं आपको एक नज़र डालने की सलाह देता हूं।

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