2016-06-28 8 views
8

documentation का कहना है:क्या WinDbg SRV * गलत के लिए प्रलेखन है?

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

.sympath SRV *

मैं हालांकि क्या मिला प्रतीकों कैश नहीं किया जाता है।

मैं WinDbg 10 का उपयोग कर रहा हूं और डिफ़ॉल्ट कैश फ़ाइलें C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\sym पर बनाई गई प्रतीत होती हैं जब मैं उन्हें हटा देता हूं और srv* पर पथ सेट के साथ निष्पादन योग्य चलाता हूं तो प्रतीकों को यहां डाउनलोड किया जाता है।

तो क्या दस्तावेज़ीकरण गलत है?

+0

कम से कम अपने व्याख्या आप से गलत साबित किया गया है। –

उत्तर

5

हां, दस्तावेज गलत है (कम से कम WinDbg 6.2.9200.16384 के लिए)।

आपने कहा आदेश दर्ज करके यह साबित कर सकते हैं:, तो

0:000> .sympath srv* 
Symbol search path is: srv* 
Expanded Symbol search path is: cache*;SRV*http://msdl.microsoft.com/download/symbols 

के रूप में हम WinDbg के उत्पादन से देख सकते हैं, विस्तार प्रतीक पथ (जो वास्तव में इस्तेमाल किया जाएगा) cache* जो कि प्रतीकों को इंगित करता है शामिल कैश किया जाएगा।

आपको यह documentation for WinDbg में मिला, जो व्यवहार को परिभाषित करने के लिए सही जगह नहीं हो सकता है, क्योंकि WinDbg प्रतीकों को स्वयं लोड नहीं करता है। इसके बजाय यह dbghelp.dll का उपयोग करता है और WinDbg सहायता अद्यतन किए बिना उस DLL का व्यवहार बदल सकता है।


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

प्रवाह है और अधिक या कम:

  1. स्प्लिट में प्रतीक पथ "," सरणी तत्व में।
  2. प्रत्येक तत्व लिए में तत्वों:
    1. "कैश *":
      1. कैश पथ का निर्धारण:
        1. स्विच तत्व की शुरुआत के अनुसार
          1. यदि कोई है तार के बाद पथ उस पथ का उपयोग करें।
            अन्यथा डिफ़ॉल्ट कैश पथ का उपयोग करें।
          2. इस पथ में निम्नलिखित सभी तत्व से कैश प्रतीक।
      2. "symsrv *":
        1. स्प्लिट तत्व पर "*" में (ज्यादातर पथ) घटकों।
        2. पहला घटक प्रतीक सर्वर डीएलएल का उपयोग करने के लिए है।
        3. अगले घटक पथ हैं। पथ में प्रतीक के लिए
          1. देखो: प्रत्येक पथ लिए। पथ
            • स्थानीय निर्देशिका में से एक हो सकता है।
            • यूएनसी।
            • HTTP या HTTPS URL - अंतिम पथ होना चाहिए।
            • खाली स्ट्रिंग - डिफ़ॉल्ट प्रतीक स्टोर का मतलब है। (SymSetHomeDirectory और !homedir देखें।)
          2. तो पाया:
            1. कॉपी इस तत्व में सभी पिछले पथ रों को प्रतीक।
            2. समाप्त प्रतीक खोज
      3. "SRV *":
        • के रूप में एक ही "symsrv * symsrv.dll *"।
      4. अन्यथा:
        1. पथ के रूप में तत्व इलाज और वहाँ प्रतीक के लिए देखो। (हैश इत्यादि के बिना symsrv.dll द्वारा किया गया।)
+0

समझ में आता है, यहां तक ​​कि यह संदेश 'डीबीएचजीईएल: प्रतीक खोज पथ: कैश *; एसआरवी * https: // msdl.microsoft.com/download/symbols' भी' कैश 'दिखाता है लेकिन वास्तव में विस्तारित पथ क्या है? तो 'srv *' एक विशेष पथ प्रतीक का प्रकार है? – zar

+0

@zar: मेरा अद्यतन उत्तर देखें। क्या उससे मदद हुई? –

+0

'प्रतीक पथ वाक्यविन्यास' के साथ पूरी तरह से सहमत है, इसका उपयोग करना मुश्किल है, यह बहुत भ्रमित है और इसमें बहुत से अर्थ और विविधताएं हैं। – zar

1

यदि आप अपने WinDbg प्रतीक पथ में special cache*path token का उपयोग करते हैं, तो WinDbg उस टोकन के बाद स्रोतों से प्रतीकों को कैश करेगा। से localpath पर प्रतीकों को कैश करने के लिए srv*localpath*serverpath लिखना भी संभव है। यदि आप कैशिंग नहीं चाहते हैं, तो सुनिश्चित करें कि आपका .sympath इसमें शामिल नहीं है।

इसके अलावा, यह जांचने के लायक हो सकता है कि प्रतीक प्रभावी ढंग से कैश किए जाते हैं (एक बार लाया जाता है, कई बार पुन: उपयोग किया जाता है) या बस इस WinDbg रन (प्रति सत्र एक बार लाया जाता है) के लिए संग्रहीत किया जाता है।

+0

यह अनिवार्य रूप से कैश किया जाता है, केवल एक बार लाया जाता है और यह हमेशा के लिए रहता है। बाद में '.reloads' तेज़ हैं। यदि मैं इस फ़ोल्डर सामग्री को फिर से हटा देता हूं तो '.reload' धीमा होता है जब यह वास्तव में प्रतीकों को प्राप्त करता है। – zar

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