स्थानीय या तर्क का मूल्य प्राप्त नहीं कर सकता क्योंकि यह इस अनुदेश सूचक पर उपलब्ध नहीं है, संभवतः क्योंकि इसे दूर अनुकूलित किया गया है


211

दृश्य स्टूडियो 2010 मारता है (असुरक्षित शब्द नहीं है) असुरक्षित ब्लॉक में फ़ंक्शन के किसी तर्क में डेटा है। इस त्रुटि का क्या कारण हो सकता है? निम्न संदेश डीबगर द्वारा दिखाता है।

Cannot obtain value of local or argument as it is not available at this instruction pointer, possibly because it has been optimized away.

2
मैं वास्तव में एक ही समस्या है और मैं डीबग बिल्ड का उपयोग कर रहा हूँ। Cannot obtain value of local or argument '<this>' as it is not available at this instruction pointer, possibly because it has been optimized away. System.Threading.Tasks.TaskExceptionHolder
javapowered

19
ओह, मैंने अभी गलती से चयन किया था ..
डैनियल लिटिल

मुझे वीएस 2017 में यह समस्या हो रही है और मैंने नीचे के पदों में सभी निर्देशों का पालन किया है। क्या कोई अन्य विकल्प भी हैं?
मैट डब्ल्यू

मेनू बिल्ड -> कॉन्फ़िगरेशन प्रबंधक मत भूलना। कॉन्फ़िगरेशन को डिबग पर सेट करने की आवश्यकता है या आपको अभी भी समस्या है।
बॉब क्लेग

जवाबों:


344

प्रोजेक्ट प्रॉपर्टीज पर जाएं और बिल्ड सुनिश्चित करें कि "ऑप्टिमाइज़ कोड" चेकबॉक्स अनियंत्रित है।

इसके अलावा, उन्नत विकल्पों (अंडर बिल्ड टैब) में "डीबग इन्फो" ड्रॉपडाउन को "पूर्ण" पर सेट करें।


128
पहले, जांचें कि बिल्ड कॉन्फ़िगरेशन डीबग है, रिलीज़ नहीं।
ApceH Hypocrite

वैसे, यदि आप इसे रिलीज़ मोड में परीक्षण करना चाहते हैं, तो आप "Debugger.Launch ();" जोड़ सकते हैं कोड में
जेसन

क्या दोनों ने कदम उठाए और कॉन्फ़िगरेशन को "रिलीज़" से "बिल्ड" में बदल दिया। विजुअल स्टूडियो 2017 कम्युनिटी एडिशन पर काम किया।
नियो

1
यदि आपके पास वीएस 2017 है तो स्वीकृत उत्तर और xyq.384.b द्वारा उत्तर दोनों मदद करेंगे। मेरे लिए xyq.384.b उत्तर ठीक था क्योंकि यह जेआईटी डिबगर था जो पॉइंटर को दबा रहा था ... मुझे खेद है कि जेआईटी ने इसे "अनुकूलित" किया ...
बिलरहल

डिबग कॉन्फ़िगरेशन पर स्विच करने के बाद मुझे पता चला कि ऑप्टिमाइज़ेशन कोड बॉक्स पहले से अनियंत्रित था। सबक सीखा: रिलीज कॉन्फ़िगरेशन मोड में डिबग न करें।
कुलीन वर्ग

135

इसके अलावा वीएस 2015 सामुदायिक संस्करण में

डीबग-> विकल्प या उपकरण-> विकल्प पर जाएं

और डीबगिंग की जाँच करें-> सामान्य-> मॉड्यूल लोड पर JIT अनुकूलन को दबाएं (केवल प्रबंधित)


7
ऊपर उल्लिखित सभी समाधानों को लागू करने के बाद इसने मेरी समस्या को हल कर दिया।
मसिह

1
सुझाए गए उत्तरों में से कोई भी मेरे लिए काम नहीं करता है। मेरे चर अभी भी अनुकूलित हैं ...
सुशी १ables१

पता नहीं क्यों यह अचानक होने लगा .. लेकिन यह तय हो गया!
मर्फीब्रॉ 2

पवित्र बकवास, यह भी मेरे लिए VS2017 समुदाय में तय किया! पता नहीं कब या कैसे इस विकल्प को रद्द कर दिया गया ...
इयान केम्प

एक चैंपियन की तरह काम करता है!
बिलरहल

59

यदि आप सक्षम किए गए अनुकूलन के साथ संकलन करते हैं, तो कई चर हटा दिए जाएंगे; उदाहरण के लिए:

SomeType value = GetValue();
DoSomething(value);

यहाँ स्थानीय चर valueको आम तौर पर हटा दिया जाएगा, इसके बजाय स्टैक पर मान रखते हुए - थोड़ा सा जैसे कि आपने लिखा था:

DoSomething(GetValue());

इसके अलावा, यदि कोई वापसी मान का उपयोग नहीं किया जाता है , तो इसे "पॉप" के माध्यम से गिरा दिया जाएगा (बजाय "स्टालोक" के माध्यम से एक स्थानीय में संग्रहीत किया जाता है, और फिर से, स्थानीय मौजूद नहीं होगा)।

इस वजह से, इस तरह के एक निर्माण में डिबगर को वर्तमान मूल्य नहीं मिल सकता है valueक्योंकि यह मौजूद नहीं है - यह केवल GetValue()और उसके बीच के संक्षिप्त समय के लिए मौजूद है DoSomething(...)

इसलिए; यदि आप डिबग करना चाहते हैं ... एक रिलीज बिल्ड का उपयोग न करें! या कम से कम, डिबग करते समय अनुकूलन को अक्षम करें।


4
अपने जवाब के लिए धन्यवाद - लेकिन मैं अपने प्रोजेक्ट में अनुकूलन कोड संपत्ति की जाँच करें और यह चयनित नहीं है = (
curiousity

4
@Marc - मैं समझता हूँ कि आप क्या कह रहे हैं, हालाँकि, मैं microsoft के रेफरेंस सोर्स लाइब्रेरीज़ का उपयोग अपने स्वयं के बकवास के माध्यम से स्टेप कोड करने के लिए कर रहा हूँ। मैं अब तरीकों से चल रहा हूं, लेकिन मैं स्थानीय लोगों के मूल्यों को नहीं देख सकता। उसके बाद .Net स्रोत डिबगिंग का क्या मतलब है? कोई सुझाव? stackoverflow.com/questions/13147132/…
one.beat.consumer

मैं @ one.beat.consumer के समान कार्य करता हुआ प्रतीत होता हूं: ASP.NET फ्रेमवर्क काम नहीं कर रहा है, यह समझने के लिए Microsoft सार्वजनिक प्रतीकों के माध्यम से कदम उठाने का प्रयास। मेरे मामले में, एमवीसी 3 में मॉडल बाइंडिंग ...
बम्बाम्स

@ one.beat.consumer मैं इसलिए मान रहा हूँ क्योंकि Microsoft संदर्भ ऑप्टिमाइज़ किए गए अनुकूलन के साथ संकलित किए गए थे, इसलिए भले ही आप मानों के माध्यम से इसे देखने के लिए उनका स्रोत कोड डाउनलोड कर सकते हैं, मान गए जैसे आप अनुकूलन के साथ अपने प्रोजेक्ट को संकलित करते हैं। सक्षम होना चाहिए। यह परियोजना (dll) विशिष्ट है - यदि आप एमएस संदर्भों के "डीबग" संस्करण प्राप्त कर सकते हैं तो आप मान देख पाएंगे। यह मत भूलो कि यदि एमएस dll को किसी अन्य परियोजना द्वारा संदर्भित किया गया था जो आपकी मुख्य परियोजना संदर्भित कर रही है, तो "अधीनता" अन्य परियोजना की सेटिंग्स से मेल खा सकती है।
ड्रूज

22

http://www.guntucomputerhacks.blogspot.com.au/2014/07/cannot-obtain-value-of-local-or.html

इसने मेरे लिए दृश्य स्टूडियो 2013 में काम किया।

तुमको बस यह करना है..

  1. राइट माउस उस प्रोजेक्ट पर क्लिक करें जिसे आप डीबग नहीं कर सकते हैं।
  2. परियोजना के स्वामित्व पर जाएं।
  3. बिल्ड मेनू पर क्लिक करें।
  4. उन्नत बटन पर क्लिक करें।
  5. डीबग जानकारी ड्रॉपडाउन मान को पूर्ण पर सेट करें।
  6. अपने प्रोजेक्ट का पुनर्निर्माण करें।

20

मैं बस इसमें भाग गया और मैं Releaseबिल्ड कॉन्फ़िगरेशन के बजाय बिल्ड कॉन्फ़िगरेशन के तहत चल रहा था Debug। एक बार जब मैं Debugअपने चर पर वापस लौटा तो घड़ी में फिर से दिखा।



8

जब मुझे उसी समस्या का सामना करना पड़ा, तो मुझे पुनर्निर्माण से पहले बस अपना समाधान साफ ​​करना था। इसने मेरे लिए इसका ख्याल रखा।


6

"ऑप्टिमाइज़ कोड" प्रॉपर्टी के साथ समस्या के बारे में अभी तक UNCHECKED होने के कारण कोड को अभी भी ऑप्टिमाइज़ किया जा रहा है: आखिरकार सब कुछ आज़माने के बाद मुझे क्या मदद मिली, एक ही सेटिंग पेज (प्रोजेक्ट प्रॉपर्टीज़ - डीबग) पर "अनवांटेड कोड डीबगिंग सक्षम करें" चेकबॉक्स चेक कर रहा था। यह सीधे कोड अनुकूलन से संबंधित नहीं है, लेकिन इस सक्षम के साथ, वीएस अब मेरे पुस्तकालय का अनुकूलन नहीं करता है और मैं डीबग कर सकता हूं।


1
दूसरा सुझाव यह सब काम फिर से धन्यवाद!
कोडमिलियन

1
वीएस 2015 में, मैं नहीं देखता Enable unmanaged code debugging। वहाँ है Enable native code debugging, मैं इस जाँच की कोशिश की, लेकिन यह कोई फर्क नहीं पड़ा।
अल लेलोपथ

1
वीएस 2015 में मैंने प्रोजेक्ट बिल्ड, वेब, डीबगर्स में "नेटिव कोड" सक्षम किया और यह सब काम कर गया।
Mouffette

6

मैंने एक ही मुद्दे का सामना किया है और मेरे लिए समाधान Solution Configurationसे परिवर्तन Releaseहै Debug। आशा करता हूँ की ये काम करेगा


4

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


3

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


1

इस समस्या का अनुभव करने वालों के लिए एक अतिरिक्त उत्तर के रूप में जब एक एज़्योर वेबसाइटों के वेब ऐप को डीबग कर रहा है:

उदाहरण के लिए, GitHub से तैनाती करते समय, कोड को डिफ़ॉल्ट रूप से अनुकूलित Azure सर्वर में संकलित किया जाता है।

मैं निर्धारित करके डीबग तरह से संकलित करने के लिए सर्वर बता SCM_BUILD_ARGSकरने के लिए/p:Configuration=Debug

लेकिन अधिक विकल्प हैं। इसे देखें: http://azure.microsoft.com/blog/2014/05/08/introduction-to-remote-debugging-on-azure-web-sites-part-3-multi-instance-environment-and-git /


1

विजुअल स्टूडियो 2012 में:

प्रोजेक्ट प्रॉपर्टीज पर जाएं -> डिबग -> अनचेक करें "विज़ुअल स्टूडियो होस्टिंग प्रक्रिया को सक्षम करें"


1

वेब अनुप्रयोगों के लिए एक और मुद्दा है जो महत्वपूर्ण है और यह अनुप्रयोग प्रकाशन प्रक्रिया के दौरान सही कॉन्फ़िगरेशन का चयन कर रहा है।

आप डिबग मोड में अपने ऐप का निर्माण कर सकते हैं, लेकिन ऐसा हो सकता है कि आप इसे रिलीज़ मोड में प्रकाशित करें, जो डिफ़ॉल्ट रूप से कोड को छोड़ देता है, लेकिन आईडीई आपको गुमराह कर सकता है क्योंकि यह जारी मोड में प्रकाशित कोड होने पर डिबग मोड दिखाता है। आप नीचे स्नैपशॉट में विवरण देख सकते हैं: यहां छवि विवरण दर्ज करें


0

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

मेरी डिबग करने योग्य विशेषता इस पर सेट की गई थी: DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints जो इस MSDN लेख के अनुसार अनुकूलन का उपयोग करने के लिए JIT कंपाइलर को बताता है। मैंने अपनी असेंबलीInfo.cs फ़ाइल से इस लाइन को हटा दिया और स्थानीय चर उपलब्ध थे।


0

विजुअल स्टूडियो 2017 या 2015 में:

सॉल्यूशन पर जाएं राईट पर राईट क्लिक करें फिर प्रॉपर्टीज़ का चयन करें-> सभी कंफिगरेशन चुनें-> डीबग करें फिर ओके पर क्लिक करें। इसके बाद पुनर्निर्माण और भागो, इस समाधान ने मेरे लिए काम किया।


0

मेरी भी यही समस्या थी। उपरोक्त सभी की कोशिश की और पाया कि मुझे भी अपनी परियोजना के लिए {PROJECT_ROOT} \ bin \ Release \ netcoreapp2.2 और {PROJECT_ROOT} \ obj \ Release \ netcoreapp2.2 के अंदर सब कुछ हटाना पड़ा। यह निश्चित रूप से प्रकाशन से संबंधित है क्योंकि मैं अपने एज़्योर वेब ऐप पर डिप्लॉयमेंट टूल्स / बिटबकेट का उपयोग करता हूं, मैंने बिल्ड >> पब्लिश >> पब्लिशिंग टू अज़ुरे की कोशिश की क्योंकि मैं निरीक्षण करना चाहता था कि कौन सी फाइलें वास्तव में तैनात थीं।


0

WPF आवेदन के साथ पहले भी यही समस्या थी और यहाँ सभी समाधान समस्या का समाधान नहीं करते थे । समस्या यह थी कि मॉड्यूल पहले से ही अनुकूलित था इसलिए निम्नलिखित समाधान काम नहीं करते (या समस्या को हल करने के लिए पर्याप्त नहीं हैं):

  • " ऑप्टिमाइज़ कोड " चेकबॉक्स अन-चेक किया गया
  • " मॉड्यूल लोड पर जेआईटी अनुकूलन को दबाएं " की जाँच की
  • DEBUG पर समाधान कॉन्फ़िगरेशन

मॉड्यूल अभी भी अनुकूलित लोड किया गया है। निम्नलिखित स्क्रीनशॉट देखें: अनुकूलित मॉड्यूल


इस समस्या को हल करने के लिए आपको अनुकूलित मॉड्यूल को हटाना होगा। अनुकूलित मॉड्यूल पथ को खोजने के लिए आप प्रोसेस हैकर जैसे उपकरण का उपयोग कर सकते हैं ।

अपने प्रोग्राम को " प्रोसेस पैनल " में डबल क्लिक करें फिर नई विंडो में टैब " .NET असेंबली " खोलें । फिर कॉलम " मूल छवि पथ " में आपको सभी अनुकूलित मॉड्यूल पथ मिलते हैं । एक आप को डी-अनुकूलन करना चाहते हैं और फ़ोल्डर हटाना (नीचे स्क्रीनशॉट देखें): यहां छवि विवरण दर्ज करें (मैं स्पष्ट कारणों के लिए अपनी कंपनी का नाम धुंधला)

अपने एप्लिकेशन को पुनरारंभ करें (चरण 1 में चेक बॉक्स के साथ सही ढंग से जाँच की गई) और यह काम करना चाहिए।

नोट : फ़ाइल को किसी अन्य प्रक्रिया द्वारा खोले जाने पर लॉक किया जा सकता है , Visual Studio को बंद करने का प्रयास करें। यदि फ़ाइल अभी भी लॉक है तो आप लॉक हंटर जैसे प्रोग्राम का उपयोग कर सकते हैं

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.