2012-01-12 8 views
8

मैं जानना चाहता हूं कि सीएलआर पीडीबी प्रतीक फाइलों को कैसे ढूंढता है, और यदि यह व्यवहार ओवरराइड किया जा सकता है।सीएलआर कैसे पीडीबी प्रतीक फाइलों को रेखांकित करता है

मैंने ऑनलाइन देखा (एमएसडीएन और अन्य संसाधन) लेकिन एक अच्छा जवाब नहीं मिला।

मेरे ऐप में, मेरे पास मुख्य .EXE पथ की कई उप-निर्देशिकाओं में डीएलएल लगाए गए हैं।

मैं एक प्रतीक \ dir रखना चाहता हूं जिसमें मेरे आवेदन के लिए सभी प्रतीकों होंगे। डिफ़ॉल्ट रूप से, मेरा मानना ​​है कि असेंबली कहां से प्रतीक उठाए जाते हैं। क्या यह बदला जा सकता है? इस ब्लॉग पोस्ट पर

+0

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

+0

बीटीडब्ल्यू सीएलआर अन्य (Win32) कोड में कॉल कर सकता है, इसलिए यह आंशिक रूप से सच है कि स्वयं में पीडीबी फाइलों के बारे में कुछ भी नहीं पता हो सकता है। –

उत्तर

2

आप बस अपनी खुद की प्रक्रिया के लिए _NT_SYMBOL_PATH वातावरण चर सेट कर सकते हैं। यह अच्छी तरह से काम:

using System; 
using System.Runtime.CompilerServices; 
using System.Reflection; 
using System.IO; 

class Program { 
    static void Main(string[] args) { 
     var path = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); 
     path = Path.Combine(path, "symbols"); 
     Environment.SetEnvironmentVariable("_NT_SYMBOL_PATH", path); 
     try { 
      Kaboom(); 
     } 
     catch (Exception ex) { 
      Console.WriteLine(ex.ToString()); 
     } 
     Console.ReadLine(); 
    } 
    [MethodImpl(MethodImplOptions.NoInlining)] 
    static void Kaboom() { 
     throw new Exception("test"); 
    } 
} 
+0

यह मेरे लिए काम नहीं करता प्रतीत होता है। क्या यह केवल तभी काम करेगा जब डीबगिंग हो या जब मैं अपना आवेदन कहीं और तैनात करूं? –

+0

मैंने डीबगर के बिना इसका परीक्षण किया और रिलीज बिल्ड चलाया। मुझे पाठ्यक्रम के दाएं उपनिर्देशिका में .pdbs डालने के अलावा, इसके लिए एक अच्छा विफलता मोड नहीं दिख रहा है। –

+0

मैं एक डेबग बिल्ड चला रहा हूं, यकीन नहीं है कि यह मायने रखता है या नहीं। मेरे ऐप के प्रारंभ में पर्यावरण परिवर्तक को प्रारंभ करना। मैंने सभी प्रतीकों को सही फ़ोल्डर में रखा है, हालांकि ऐसा लगता है कि यह वहां से नहीं उठाया जाता है। –