7

में कदम नहीं उठा रहा है मेरे पास यह सरल एसिंक कॉल है जो मैं कर रहा हूं। मैं DownloadDataTaskAsync विधि पर कॉल का पालन करना चाहता हूं और माइक्रोसॉफ्ट .NET फ्रेमवर्क स्रोत कोड में कदम उठा सकता हूं।विजुअल स्टूडियो डीबगर .NET फ्रेमवर्क स्रोत कोड

using System; 
using System.Net; 
using System.Text; 
using System.Threading.Tasks; 

namespace WhereIsTheTaskSchedulerHere 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var task = GetData("http://sathyaish.net"); 
      var buffer = task.Result; 

      var data = Encoding.ASCII.GetString(buffer); 

      Console.WriteLine(data); 
      Console.WriteLine("\nPress any key to continue..."); 
      Console.ReadKey(); 
     } 

     async static Task<byte[]> GetData(string url) 
     { 
      var client = new WebClient(); 
      var data = await client.DownloadDataTaskAsync(url); 
      return data; 
     } 
    } 
} 

मैं मुद्दा यह है कि कोड कॉल System.Net.WebClient.DownloadBits विधि जब तक परावर्तक में कॉल का पालन किया। अगर कॉल को असीमित रूप से निष्पादित करने के लिए किया गया था, तो यह विधि System.Net.WebRequest कक्षा पर एसिंक्रोनस प्रोग्रामिंग मॉडल (एपीएम) विधि BeginGetResponse पर कॉल करके थ्रेडपूल थ्रेड पर काम को आगे शेड्यूल करती है।

यहां परावर्तक से DownloadBits विधि का कोड है।

private byte[] DownloadBits(WebRequest request, Stream writeStream, CompletionDelegate completionDelegate, AsyncOperation asyncOp) 
{ 
    WebResponse response = null; 
    DownloadBitsState state = new DownloadBitsState(request, writeStream, completionDelegate, asyncOp, this.m_Progress, this); 
    if (state.Async) 
    { 
     request.BeginGetResponse(new AsyncCallback(WebClient.DownloadBitsResponseCallback), state); 
     return null; 
    } 
    response = this.m_WebResponse = this.GetWebResponse(request); 
    int bytesRetrieved = state.SetResponse(response); 
    while (!state.RetrieveBytes(ref bytesRetrieved)) 
    { 
    } 
    state.Close(); 
    return state.InnerBuffer; 
} 

तो, मैं दृश्य स्टूडियो में दो breakpoints की स्थापना:

1) Sytem.Net.WebClient.DownloadBits पद्धति पर एक; और अन्य

enter image description here

2) System.Net.WebRequest.BeginGetResponse विधि पर।

enter image description here

enter image description here

मैं निम्नलिखित की दोबारा जांच कर।

1) मैं दृश्य स्टूडियो उपकरण में डिबगिंग सेटिंग को कॉन्फ़िगर यही कारण है कि -> विकल्प सही ढंग से डिबगर .NET फ़्रेमवर्क स्रोत से निकलने के लिए अनुमति देता है संवाद।

enter image description here

2) मैं डाउनलोड करने और डिबग प्रतीकों में से कैशिंग एक उचित स्थान के लिए सक्षम था।

enter image description here

3) मैं स्थान की दोबारा जांच कर और सभी विधानसभाओं मेरी कोड जिक्र किया गया और विशेष रूप से System.dll जो तरीकों कि मेरी breakpoints लगा दी गई थी के लिए के लिए डीबग प्रतीक थे कि देखा।

enter image description here

हालांकि, जब मैं पर डिबगिंग के साथ कोड भाग गया, यह शिकायत की कि यह System.dll के लिए डिबग प्रतीकों नहीं पा सके। इसलिए, मैंने लोड बटन पर क्लिक किया ताकि इसे माइक्रोसॉफ्ट सिंबल सर्वर से रनटाइम पर डाउनलोड किया जा सके।

enter image description here

भी तो

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

enter image description here

मैं दायाँ क्लिक किया है मेनू आइटम क्लिक करने के लिए लोड चिह्न कॉल स्टैक विंडो में DownloadBits विधि के ढेर फ्रेम, लेकिन यह वहाँ नहीं था। नतीजतन, स्रोत कोड मेनू आइटम पर भी अक्षम किया गया था।

enter image description here

मैं कैश साफ़ कर और यह सब विधानसभाओं डाउनलोड नए सिरे से लेकिन है कि या तो नहीं मदद की है करते हैं।

मैं विजुअल स्टूडियो सामुदायिक संस्करण 2015 का उपयोग कर रहा हूं और मेरा प्रोग्राम .NET ढांचे के v4.5.2 को लक्षित कर रहा है और मैं पहले इस सेट का उपयोग करके .NET स्रोत असेंबली में कदम उठाने में सक्षम हूं।

मुझे क्या याद आ रही है?

+2

संदर्भ स्रोत वेबसाइट 22 अप्रैल के आसपास विंडोज अपडेट के माध्यम से दिए गए .NET अद्यतन के बाद सिंक से बाहर हो गई है। एक बहुत ही आम दुर्घटना, [इस पोस्ट] में उपलब्ध संकेतों का निदान (http://stackoverflow.com/a/27655501/17034) .. –

+0

@ हंसपैसेंट बहुत बहुत धन्यवाद। ** मॉड्यूल ** विंडो में संदर्भ मेनू से ** प्रतीक लोड जानकारी ** पर क्लिक करने पर, ** प्रतीक लोड जानकारी ** संवाद रिपोर्ट करता है कि यह मेरे स्थानीय से 'System.dll' के लिए डीबग प्रतीकों को लोड करने में सक्षम था कैश। हालांकि, यह अभी भी स्रोत में कदम नहीं उठाता है। –

+0

@ हंसपैसेंट बीटीडब्ल्यू ने उपयोगकर्ता वॉयस आइटम को 3 वोटों से ऊपर उठाया। :-) –

उत्तर

0

आप dotPeek के साथ ऑन-द-फ्लाई सिंबल सर्वर का उपयोग करने का प्रयास कर सकते हैं। यह असेंबली को विघटित कर देगा और एक सामान्य प्रतीक सर्वर के रूप में कार्य करेगा।

डॉटपीक (उपकरण -> प्रतीक सर्वर) में प्रतीक सर्वर सेट करें। क्लिपबोर्ड पर सिंबल सर्वर पता कॉपी करें।

इस सिंबल सर्वर को विजुअल स्टूडियो में जोड़ें और दूसरे को हटाएं (या इसे अक्षम करें)।

ध्यान रखें, सभी .NET असेंबली लोड करने में लंबा समय लग सकता है। आप dotPeek में Assemblies opened in the Assembly Explorer विकल्प चुनकर इसे ट्विक कर सकते हैं।

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