.net - "لن يتم الوصول إلى نقطة التوقف حاليًا.يختلف رمز المصدر عن الإصدار الأصلي."ماذا يعني هذا؟




visual-studio debugging (25)

في حالتي ، كنت أقوم بتطوير تطبيق Windows CE ، والذي تم اختباره ضد محاكي. كانت المشكلة أن الملف التنفيذي لم يتم نشره في المحاكي ، لذلك كان .pdb (في بيئة التطوير) متزامناً مع .exe (في المحاكي) ، لأنه لم يتم نسخ .exe الجديد أبداً إلى المحاكي. اضطررت إلى حذف. exe في المحاكي لفرض نشر جديد. ثم عملت.

عند تصحيح الأخطاء في Visual Studio ، في بعض الأحيان أقوم بإضافة نقطة توقف ولكنه أجوف ويقول VS "لن يتم الآن تسجيل نقطة الإيقاف. رمز المصدر مختلف عن الإصدار الأصلي." من الواضح أن هذا يمنعني من القدرة على التصحيح.

ما الذي تعنيه الرسالة على الأرض؟ ما النسخة الأصلية؟ إذا كنت قد فتحت للتو الحل ولم أدخل أي تغييرات على الشفرة ، كيف يمكن أن يكون هناك "إصدار أصلي"؟


يمكنك الحصول على هذه الرسالة عندما تستخدم مُنشِّطًا ولم يتم تحميل التجميع الذي قمت بتعيين نقطة الإيقاف له.

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


حاول تعطيل وإعادة نقطة الإيقاف أثناء التشغيل في وضع التصحيح بدلاً من القيام بذلك قبل تشغيل وضع التصحيح.


حدد تصحيح الأخطاء في تكوينات الحلول ، بدلاً من الإصدار


اختبرت هذا في بناء 32 بت على vs2017.

بالضبط لا شيء من الحلول عملت بالنسبة لي. أنا إعادة تشغيل ، قمت بمسح ملفات IDE ، حل بنيت نظيفة ، سحبت من ريبو بوابة وإعادة بناء الحل دون جدوى.

كنت سحب في التبعية 64bit من nuget وحالما استخدمت التجميع ، لم تكن المصادر التي يجري بناؤها في الملف التنفيذي النهائي بعد الآن ، وبدلا من ذلك تم بناء مصادر IDE المخزنة مؤقتا.

قمت بإزالة تكوين nuget ، وأزلت التجميع المشار إليه ، وقمت بتنزيل المصدر ، وقمت بإنشاء log4net يدويًا ، ووقعته ، وأضفته إلى مجلد في مشروعي ، وأضفت إليه إشارة ، وتمكنت من التصحيح مرة أخرى.

كان هذا ألمًا ، آمل أن يستيقظ في قائمة الإجابات ليراها الجميع.

تعديل: لم يكن هناك أي خطأ أثناء الإنشاء على الرغم من وجود خيار "موجه على خطأ في الإنشاء" قيد التشغيل في إعدادات IDE.


إذا كان لديك أكثر من مشروع في الحل الخاص بك ، فتأكد من تعيين المشروع الصحيح كمشروع StartUp Project . لتعيين مشروع معين كمشروع بدء تشغيل الحل الخاص بك ، انقر بزر الماوس الأيمن فوق المشروع ، واختر Set As StartUp Project .

بعد تعيين My StartUp Project بشكل صحيح ، تم الوصول إلى نقطة الإختطاف المطلوبة من قبل الخيط.


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

  • C:\Documents and Settings\%username%\AppData\Local\Temp\Temporary ASP.NET Files
  • C:\windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files

أخيراً حل المشكلة عندما اكتشفت أن ملف فئة قمت بنقله عمداً إلى مجلد فرعي ، وظهر بطريقة ما في المجلد الجذر. كان VS يستخدم ذلك بينما كنت أقوم بتحرير الآخر.


في حالتي ، كنت أعلق على عملية قيد التشغيل في VS 2012. عند إرفاق ، يتم منحك خيار تصحيح في أوضاع مختلفة (الأصلي ، النصي ، Silverlight ، المدارة 2.0 ، المدارة 4.0 ، الخ). بشكل افتراضي ، يحدد المصحح الوضع تلقائياً. ومع ذلك ، لا يقوم الخيار Automatic تلقائيًا بإجراء الاختيار الصحيح. إذا احتوت العملية على أنواع متعددة من التعليمة البرمجية ، فتأكد من أن مصحح الأخطاء يستخدم النوع الصحيح.


المشكلة هي أن معلومات التصحيح ليست متزامنة مع التجميع الخاص بك. الحل بسيط:

  1. اذهب إلى مجلد سلة الخاص بك
  2. قم بإزالة ملفات .pdb
  3. إعادة بناء

يجب أن تفعل الخدعة!

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


إذا كانت العملية التي تم تصحيحها تحتوي على عدة نطاقات تطبيقية وتم تحميل التجميع إلى كل منهما ، وكان أحدهما يقوم بتحميل نسخة قديمة (عادةً ما يتم تحميلها ديناميكيًا مثل مكون إضافي) ، يمكن أن تظهر نقطة الإيقاف ثابتة ، لكن الخيط الذي يجب أن يصل إلى نقطة الإيقاف في appdomain مع الجمعية القديمة ، ويضرب أبدا. يمكنك رؤية ما يتم تحميل التجميعات ومسارها في إطار الوحدة النمطية.


هل فعلت هذا من قبل؟

هل ترغب في متابعة وتشغيل آخر بناء ناجح؟

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

حاول تغيير هذه القيمة:

  • أدوات
    • خيارات
      • مشاريع وحلول
        • بناء وتشغيل
          • عند التشغيل ، عند حدوث أخطاء في الإنشاء أو النشر: لا يتم التشغيل

أولاً حاولت من سطر الأوامر ؛

حذف الملفات المؤقتة من سطر الأوامر .

C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Temporary ASP.NET Files> rd / s root

عندما أقوم بتعطيل الخيار "Enable Just My Code" في أدوات -> Options -> Debugging -> General

حل المشكلة بالنسبة لي. هو تطبيق WCF ، كان يحاول تصحيح صفحة ashx. http://blogs.msdn.com/b/zainnab/archive/2010/10/25/understanding-just-my-code.aspx


لقد واجهت هذا أيضا. الشروط التي تسببت في مشكلتي:

  • أنا أشغل نسخة كاملة IIS7 محليا
  • أقوم بإعداد برنامجي في مشاريع منفصلة

لقد تسببت في ذلك عن طريق فتح إصدار سابق (VS مطالبتك بسؤال ما إذا كنت أريد أن أشر إلى هذا المثيل في تصحيح أخطاء IIS ، أجبت بـ "نعم") ، ثم فتح الإصدار الحالي (مرة أخرى الاستجابة إلى موجه IIS مع "نعم" ) ، ثم محاولة التصحيح في الإصدار السابق.

لحل ، أغلقت فقط وإعادة فتح الإصدار السابق والمقصود ، مرة أخرى تأكيده كمصدر التصحيح.


يمكن أن يؤدي إغلاق Visual Studio وإعادة فتح الحل إلى حل المشكلة ، بمعنى أنه خطأ داخل IDE نفسه (أقوم بتشغيل VS2010).

إذا كان لديك أكثر من مثيل واحد من Visual Studio قيد التشغيل ، فستحتاج فقط إلى إغلاق المثيل الذي يقوم بتشغيل الحل مع المشكلة.


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


اذهب إلى

  • أدوات
    • خيارات
      • التصحيح
        • جنرال لواء

قم بإلغاء تحديد يتطلب ملفات المصدر لتتناسب تمامًا مع النسخة الأصلية


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

  • مكتشف الحل
    • انقر بزر الماوس الأيمن فوق الحل
      • الخصائص
        • خصائص مشتركة
          • تصحيح ملفات المصدر
            • "لا تبحث عن ملفات المصدر هذه".

لسبب غير معروف لي ، قررت VS 2013 وضع ملف مصدر هناك ، وبعد ذلك ، لم أستطع الوصول إلى نقطة توقف في هذا الملف بعد الآن. قد يكون هذا هو السبب في أن "شفرة المصدر تختلف عن النسخة الأصلية".


يحدث هذا أيضاً عند تصحيح مشروع C ++ الذي يقوم بتحميل الوحدة النمطية التي تم تنفيذها مع بعض لغة CRL (Managed C ++ ، C # إلخ). في هذه الحالة رسالة الخطأ مضللة بالفعل.

الحل هو وضع خاصية التكوين دعم وقت تشغيل اللغة العامة (CLR) إلى مشروع بدء التشغيل وإعادة ترجمة ذلك.


انتبه إلى نافذة "Output" في VS. وسوف اقول لكم ما هي تحميل التجميعات ومتى. قد ترى أن إصدارًا قديمًا من التجميع الخاص بك في مكان ما في المجلد قيد التحميل.

على سبيل المثال ، إذا كان لديك تجميعات متعددة وكنت تحاول حاليًا تقسيم إحدى تجميعات الدعم ، فسوف يقوم CLR بمعالجة حل التجميع ، والذي قد يقوم بتحميل ملف تجميع آخر غير الملف الذي قمت بالإشارة إليه في المشروع.


انتقل إلى: أدوات -> خيارات -> تصحيح -> عام وغير محدد "يتطلب ملفات المصدر لتتناسب تماما مع النسخة الأصلية"


ما يعمل بالنسبة لي هو تغيير النظام الأساسي للحلول من x86 إلى أي وحدة المعالجة المركزية. بعد تغييره إلى أي ، أعددت عنوانًا للتوقف ، وشغلت موقع الويب ، وفتحت الصفحة ، وانقرت على الزر وتوقفت. أغلقت الموقع ، وتغيرت مرة أخرى إلى x86 وأجرت نفس التسلسل بنجاح.


بالنسبة لي ، لم تحل أي من العناصر المشكلة. لقد أضفت للتو سطرًا جديدًا من الشفرة داخل هذه الوظيفة ، مثل:

int a=0;

بإضافة ذلك ، أعتقد أني قمت بتشغيل استوديو مرئي لإضافة هذه الوظيفة إلى النسخة الأصلية


ظهرت طريقة جديدة للحصول على هذه المشكلة بدءًا من Visual Studio 2017 15.3.1 حتى 15.3.5. إذا كنت تستخدم EditorConfig ، يؤدي الخيار charset=utf8 حدوث هذه الأعراض. استنسخ فريق VS هذا ويقول إنهم يعملون عليه .

لذا ، هناك حل واحد للتعليق على سطر charset=utf8 في ملف .editorconfig.

تحرير: يجب إصلاح هذا كـ VS 15.5.


يمكن أن يحدث هذا عندما يتغير وقت النظام أثناء التصحيح أو بين جلسات التصحيح ، سواء كان برمجيًا أو يدويًا أو بواسطة برنامج خارجي.


نسخ مُثبِّت ملف log.txt تم إنشاؤه على جهاز كمبيوتر يعمل بنظام XP. كنت أبحث في ذلك ملف السجل الذي يعتقد أنه تم إنشاؤه على نظام التشغيل Vista. بمجرد أن أصلح تهيئتي log4net لتكون "Vista Compatible". Environment.GetFolderPath كان بإرجاع النتائج المتوقعة. لذلك ، سأغلق هذه المشاركة.

قد يكون مرجع مسار SpecialFolder التالي مفيدًا:

الإخراج على نظام التشغيل Windows Server 2003:

SpecialFolder.ApplicationData: C:\Documents and Settings\blake\Application Data
SpecialFolder.CommonApplicationData: C:\Documents and Settings\All Users\Application Data
SpecialFolder.ProgramFiles: C:\Program Files
SpecialFolder.CommonProgramFiles: C:\Program Files\Common Files
SpecialFolder.DesktopDirectory: C:\Documents and Settings\blake\Desktop
SpecialFolder.LocalApplicationData: C:\Documents and Settings\blake\Local Settings\Application Data
SpecialFolder.MyDocuments: C:\Documents and Settings\blake\My Documents
SpecialFolder.System: C:\WINDOWS\system32`

Output on Vista:

SpecialFolder.ApplicationData: C:\Users\blake\AppData\Roaming
SpecialFolder.CommonApplicationData: C:\ProgramData
SpecialFolder.ProgramFiles: C:\Program Files
SpecialFolder.CommonProgramFiles: C:\Program Files\Common Files
SpecialFolder.DesktopDirectory: C:\Users\blake\Desktop
SpecialFolder.LocalApplicationData: C:\Users\blake\AppData\Local
SpecialFolder.MyDocuments: C:\Users\blake\Documents
SpecialFolder.System: C:\Windows\system32

الإخراج على نظام التشغيل Vista:

SpecialFolder.ApplicationData: /home/$USER/.config
SpecialFolder.CommonApplicationData: /usr/share
SpecialFolder.ProgramFiles: 
SpecialFolder.DesktopDirectory: /home/$USER/Desktop
SpecialFolder.LocalApplicationData: /home/$USER/.local/share
SpecialFolder.MyDocuments: /home/$USER
SpecialFolder.System: 

SpecialFolder.Personal: /home/$USER




.net visual-studio debugging