تصحيح أخطاء كود .NET باستخدام خادم الرموز الخاص بـ MS - VS لا يُظهر قيم المتغير

StackOverflow https://stackoverflow.com/questions/294738

  •  08-07-2019
  •  | 
  •  

سؤال

عندما أقوم بتصحيح كود موقع ويب ASP.NET الخاص بي باستخدام رمز تصحيح Microsoft لـ .NET ..أستمر في الحصول على هذه "النتيجة" السخيفة بالنسبة لمعظم المتغيرات عندما أقوم بتصحيح أخطاء كود .NET Framework (والذي يتم توفيره بالطبع بواسطة Microsoft Simol Server، والذي طلبت من VS2008 الحصول على المعلومات منه)

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

يبدو الأمر كما لو أن الكود الذي أستخدمه يستخدم كودًا محسّنًا ومجمعًا.إذا كان الأمر كذلك، فهل يمكنني إخباره بعدم التحسين؟أنا في تكوين DEBUG.إنه أمر محبط للغاية لأنني لا أستطيع تصحيح الأخطاء ..لأنني لا أستطيع رؤية/استرداد قيم المتغيرات المحلية أثناء التنقل عبر الكود.

أي أدلة / أفكار؟

هل كانت مفيدة؟

المحلول

وصف شون بيرك طريقة لتعطيل هذا على جهازه مدونة.

أولاً، قم بإنشاء CMD الذي سيقوم بتحميل Visual Studio بدون تحسين JIT.

set COMPLUS_ZapDisable=1
cd /d "%ProgramFiles%\Microsoft Visual Studio 9.0\Common7\ide\"
start devenv.exe
exit

بمجرد الدخول إلى مشروع Visual Studio الخاص بك، قم بالخطوات التالية:

1) انقر بزر الماوس الأيمن على ملف المشروع الخاص بك واختر "خصائص"

2) اختر علامة التبويب "تصحيح" وقم بإلغاء تحديد "تمكين عملية استضافة Visual Studio"

3) قم بتشغيل التطبيق الخاص بك في مصحح الأخطاء.

نصائح أخرى

لتطبيق صافي العادي يمكنك تعطيل استخدام أمثل JIT مع ملف .INI بجانب ثنائي البدء. وإليك وصلة لكيفية تحقيق ذلك

HTTP: // blogs.msdn.com/jaredpar/archive/2008/08/29/disabling-jit-optimizations-while-debugging.aspx

وتصحيح ASP.Net يختلف قليلا وعلى الرغم من أنني لست متأكدا اذا كان هذا العمل بالنسبة لك. إذا كان يتم تصحيحه محليا باستخدام خادم الويب خفيفة الوزن (كاسيني) يمكنك تطبيق هذه الحيلة لكاسيني نفسها. إذا كنت debuggin مباشرة على خادم الويب على الرغم من داخل IIS أنا لا أعرف كيفية الحصول على هذه الحيلة للعمل ولكن نأمل انه سوف تقودك في الاتجاه الصحيح.

بعد الكثير من البحث، تمكنت من العثور على طريقة لجعل تقنية "COMPLUS_ZapDisable" تعمل أيضًا عند إرفاق تطبيق مستضاف على IIS ضمن IIS7/Windows 7 x64.

في حالتي، أنا أستخدم الرموز التي تم إنشاؤها بواسطة Reflector Pro، على الرغم من أن تخميني هو أنها ستعمل أيضًا مع رموز Microsoft التي سأل عنها OP.

تكمن الحيلة في العثور على المكان المناسب لتعيين متغير البيئة هذا بحيث يتم تشغيل w3wp.exe الخاص بك مع تمكين هذا الإعداد.للقيام بذلك، قم بإضافة مفتاح سلسلة يسمى "COMPLUS_ZAPDISABLE" إلى السجل الخاص بك على "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment".اضبط قيمة المفتاح على "1"، وهذا من شأنه أن يفي بالغرض.لا تفعل هذا على الإنتاج =)

مجد لكليف تونغ، مؤلف هذا المشنور من البوابة الحمراء، لتوجيهي في الاتجاه الصحيح.

تم تحسين كود صافي الإطار، لذلك سوف لن تكون قادرة على عرض جميع المتغيرات لأنها ربما لم تكن موجودة في رمز الأمثل. أفترض أنك تحاول تصحيح داخل صافي الإطار نفسه. لا شيء من ذلك بكثير يمكنك القيام به حيال ذلك للأسف.

وأخيرا، يعمل هذا الحل بالنسبة لي عندما المترتبة على تكرار aspnet_wp.exe البصرية ستوديو 2008، الإطار الصافي 2.0: اذهب إلى خصائص المشروع، في علامة التبويب إنشاء، الزر خيارات متقدمة -> ضبط الانتاج وتصحيح معلومات إلى "كامل". آمل أن يساعد هذا شخص.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top