تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
إعداد الفيجوال ستوديو لتنقيح و مشاهدة الشفرات المصدرية لإطار عمل .نت
#1
كاتب الموضوع : Boutemine Oualid


إعداد الفيجوال ستوديو لتنقيح الشفرات المصدرية لإطار عمل .نت
مقال مترجم عن مدونة Schwan burke’s
أخيرا، و في سابقة في تاريخ مايكروسوفت، أصبحت الشفرات البرمجية لمكتبات الفريم وورك .نت مفتوحة المصدر بحيث صار بامكان المبرمج أن يطلع على الشفرات المصدرية مع جميع التعليقات التي كتبها المطورون في ال BCL Team.
خلال هذا المقال سنتعرف سويا على الخطوات الواجب تنفيذها للوصول إلى الشفرات المصدرية للفريم وورك .نت
أعلن Scott Guthrieأحد رؤساء فرق التطوير الخاصة بتقنيات الدوت نت في فرع مايكروسوفت للبرمجيات أن الشركة وضعت تحت تصرف المبرمجين إمكانية قراءة الشفرات البرمجية الخاصة بإطار عمل الدوت نت من الفيجوال ستوديو 2008.
البرامج اللازم تثبيتها:



- عليك أن تعرف أن هذه الخدمة غير متوفرة في النسخة المجانية Express للفيجوال ستوديو 2008.
1. أولا عليك تنصيب البرنامج Visual Studio 2008 QFE، هذا البرنامج عبارة عن ملف تصحيح يقوم بتحديث مكتبة DLL خاصة بمنقح الفيجوال ستوديو لكي يصبح قادرا على استخراج و إظهار الملفات الخاصة بالشيفرات المصدرية.
يمكنك تنزيله بالضغط فوق اسمه كما يمكنك قراءة معلومات مفيدة على صفحة التنزيل.
- إذا حصل خطأ أثناء عملية التنصيب حاول بإدخال قرص الدي في دي الخاص بالفيجوال ستوديو، قد يكون هذا الخطأ ناتج عن إمكانية تعارض ناتجة عن وجود نسخة أقدم من الفيجوال ستوديو.
2. بعد استكمال عملية التنصيب، قم بتشغيل الفيجوال ستوديو 2008 و اذهب إلى Tools > Options > Debugging > General .
إن كنت تشغل الفيجوال ستوديو على إعدادات الفيجوال بيسك افتراضيا عليك بضبط خانة الخيارات الموجودة في أسفل نافذة الإعدادات قبل المواصلة .
قم بتغيير قيم الاعدادات التالية:
- Enable Just My Code: اضبطها على الخيار OFF.
- Enable Source Server Support: اضبطها على الخيار ON.
ستكون نافذة الاعدادات الخاصة بالفيجوال ستوديو كما في الصورة التالية:


3. انتقل من التبويب General إلى التبويب Symbols كما يظهر في الصورة الآتية و قم بتغيير الخصائص الثلاثة التالية:
أ‌. قم بإضافة العنوان التالي إلى منطقة الSymbol file location : http://referencesource.microsoft.com/symbols
ت‌. قم باختيار مجلد لتخزين الملفات الcash التي يتم تنزيلها من الخادم على العنوان السابق و تأكد من أن المجلد ليس للقراءة فقط. الاختيار الأفضل هو مجلد تحت مجلد حسابك (c:\users\yourUserName\symbols تحت الفيستا أو c:\ documents and settings\yourUserName\symbols تحت الوينداوز xp).
ث‌. قم بتفعيل الخاصية Search the above locations only when symbols are loaded manually.
و هذه هي صورة نافذة الإعدادات بعد القيام بالتعديلات السابقة:


انهينا عملية التنصيب... إلى العمل
[SIZE=4]التنقيح داخل شيفرة اطار عمل الدوت نت[/SIZE]سنستعمل مثال بسيط باستخدام لغة السي شارب على مشروع من نوع Windows Application Project لكن يمكنك استعمال نفس الخطوات على أي مشروع آخر بلغة أخرى.
1. قم بإنشاء مشروع جديد من نوع Windows Application Project ثم اضغط مرتين على النموذج ليظهر لك محرر الشيفرات كما في الصورة التالية، قم بكتابة الشيفرة كما يظهر في الصورة و أضف نقطة توقف (Breakpoint) على سطر الأمر





2. الآن قم بتشغيل البرنامج بالضغط على الزر F5، سيتوقف المترجم عند نقطة التوقف التي أضفتها، و قم باظهار نافذة رصة الاستدعاءات (Call Stack) بالضغط على الاختصار (CRTL+ALT+C) ، بعدها قم بالضغط على بالزر الأيمن للفأرة على عنصر يبدأ ب System.Windows.Forms.dll من عناصر القائمة واختر الأمر "Load Symbols"، هذه العملية تقوم بتحميل ملفات الشيفرات البرمجية الخاصة بالمجمع System.Windows.Forms من عنوان السيرفر و الذي يبلغ حجمها حوالي 10 ميغا بايت، لذلك عليك الصبر قليلا ان كان اتصالك بشبكة الانترنت بطيئا.



ستتوقف بيئة التطوير عن الاستجابة أثناء عملية التنزيل، ولكن عملية التنزيل هذه لن تتكرر لأن ملف الشيفرات سيخزن في مجلد الكاش (الذي قمت باختياره سابقا) على شكل ملف PDB خاص بكل مجمع على حدة، يمكنك الاستعلام عن تقدم عملية التنزيل بمشاهدة منطقة ال ProgressBar في شريط الحالة Status Bar.
3. ستلاحظ بعد انتهاء عملية التنزيل أن لون العناصر التي تبدأ ب System.Windows.Forms.dll من اللون الرمادي إلى اللون الأسود، الآن يمكنك أن تشاهد الشيفرات المصدرية الخاصة بكل حدث، خاصية أو طريقة لجميع عناصر المجمع الخاص بمجال الأسماء Windows.Forms بالضغط عليها بالزر الأيمن و اختيار الأمر Load Symbols في كل مرة تريد الاستعلام عن شيء ما.



يمكنك الآن تتبع سير الشيفرة الخاصة ببرنامجك و تتبعها سطر بسطر باضافة نقاط التوقف و استعمال الزر F11 الذي يقوم بتنفيذ الشيفرة سطر بسطر، كما يمكنك مواصلة التنقيح خطوة خطوة داخل ملف الDLL الخاص بالمجمع باختيار العنصر الذي تريده من نافذة ال Call Stack و الضغط على الزر F11 مجددا لينتقل المترجم إلى ملف الشيفرة.
4. عند فتح الشيفرة المصدرية لأول مرة، ستشاهد ال EULA (الاتفاقية النهائية بين المستخدم و الشركة)، عليك بالضغط على موافق Accept لتبدأ عملية التنزيل.



لمشاهدة أي شيفرة مصدرية لمجمع آخر، عليك بإتباع نفس الخطوات السابقة، مع ملاحظة أن عملية التنزيل لكل شيفرة مصدرية خاصة بمجمع جديد تتطلب الموافقة على شروط ال EULA مرة واحدة لكل مجمع.
في بعض الحالات قد لا تجد اسم المجمع الذي تريد أن تشاهد الملفات المصدرية الخاصة به في نافذة ال call stack.

}}}
تم الشكر بواسطة:
#2
قبل أن تضغط على الزر F11 للدخول إلى الشيفرة المصدرية لل Graphics.DrawRectangle يجب أن تقوم بتحميل ملفات الpdb الخاصة بهذا المجمع و عرض الرموز Symbols الخاصة بجميع المحتويات و ذلك بعرض نافذة Modules Window بالضغط على الاختصار CTRL+ALT+U (ستظهر هذه النافذة أثناء عملية التنقيح فقط). ستقوم النافذة بعرض لائحة بجميع الرموز المحملة من طرف المنقح، اختر System.Drawing.DLL في القائمة و اضغط بالزر الأيمن لاختيار الأمر Load Symbols كما يظهر في الصورة التالية:


لاحظ أنه بمجرد تحميل ملف الرموز، ستجد مساره معروضا في العمود « Symbol File »
الآن يمكنك أن تدخل إلى شفرة الأمر Graphics.DrawRectangle وتتبع عملية الترجمة خطوة خطوة بالضغط على الزر F11.
للمستخدمين المتقدمين
اعتياديا، في كل مرة تبدأ فيها عملية تنقيح، بيئة التطوير Visual Studio تقوم بتحميل الملفات اللازم لكل مجمع تود تتبع التنقيح فيه، بعد أن يتأكد من وجود الملف في المجلد الذي يخزنها فيه (و الذي قمنا بشرح كيفية اختياره و تغييره في الفقرات السابقة)، بعض المشاريع تتطلب الكثير من ملفات pdb الخاصة بكل مجمع ما يجعل العملية تتطلب بعض الوقت و قد تتطلب وقت كبير جدا في حالة عدم وجودها على القرص الصلب لأنه سيقوم بتنزيلها من الموقع، لذلك ننصح بتتبع عملية التنقيح يدويا عن طريق اختيار الأمر Load Symbols من القائمة المنسدلة (كما شرحناها سابقا) بدلا من الاعتماد على الترجمة سطرا سطرا بالضغط الزر F11 لهذا السبب، قمنا باستعمال عملية التحميل اليدوية سابقا.
على كل حال، هناك طريقة لجعل عملية التحميل تلقائية لتفادي عملية التحميل اليدوية المملة و في نفس الوقت تسريع العملية، وذلك بفتح نافذة الإعدادات و اختيار التبويب Symbols (يمكنك الدخول إليها مباشرة باختيار الأمر Symbols Settings من القائمة المنسدلة فوق نافذة رصة الاستدعاءات (call stack window) أو نافذة ال Modules (CTRL+ALT+U) (ستظهر هذه النافذة أثناء عملية التنقيح فقط)) بعدها قم بنزع العلامة صح من أمام الاختيار Search from the above locations… (كما في الصورة الآتية)، الهدف من هذه العملية هو جعل المنقح في بيئة التطوير يقوم بتنزيل جميع ملفات pdb من الموقع مع أول عملية ترجمة للمشروع (F5).
بعد أن تقوم بنزع العلامة قم بإغلاق بيئة التطوير و أعد فتح مشروعك من جديد، عندما تكون مستعدا لعملية التنزيل الكلية عليك بترجمة المشروع بالضغط على زر F5 ومن ثم ستبدأ عملية التنزيل لجميع ملفات الpdb المتعلقة بمشروعك و تخزينها في القرص الصلب. عليك أن تعلم أن حجم هذه الملفات في العادة هو 50 ميغا و هو حجم كبير نسبيا و قد يتطلب بعض الوقت، لذلك لا تجزع إن لم تستجب بيئة التطوير و يستحسن أن تتركها و تقوم بعمل آخر.


بعد استكمال العملية، قم بتوقيف المنقح و عد إلى نافذة الإعدادات و قم بنزع العلامة صح من أمام عنوان موقع التحميل و أضغط على موافق كما يظهر في الصورة التالية:


الآن بعد استكمال جميع هذه المراحل يمكنك الآن أن تواصل عملية التنقيح اعتياديا (من نافذة رصة الاستدعاءات) دون المرور بالمراحل السابقة.
عليك أن تعرف أن الانتقال إلى مشروع آخر يستعمل مراجع إلى مجمعات مختلفة أو أردت أن تضيف مجمعات جديدة إلى المشروع لتستعملها يتطلب إعادة القيام بالمراحل السابقة مع العلم أن المجمعات التي تم تنزيل ملفات الpdb الخاصة بها لا يعاد تنزيلها إن استعملها مشروع آخر.
بعض الأسئلة و الإجابات عنها:
الكاتب الأصلي للمقالة يتكلم هنا...
1/ ما هي المجمعات التي تتوفر ملفات pdb لها؟
· Mscorlib.DLL
· System.DLL
· System.Data.DLL
· System.Drawing.DLL
· System.Web.DLL
· System.Web.Extensions.DLL
· System.Windows.Forms.DLL
· System.XML.DLL
· WPF (UIAutomation*.dll, System.Windows.DLL, System.Printing.DLL, System.Speech.DLL, WindowsBase.DLL, WindowsFormsIntegration.DLL, Presentation*.dll, وبعض المجمعات الأخرى)
· Microsoft.VisualBasic.DLL
2/ عندما أقوم بالضغط على الخيار Load Symbols من القائمة المنسدلة تظهر لي نافذة فتح ملفات تسألني عن ملف ال PDB، لماذا؟
تظهر هذه النافدة في حالة من الحالات التالية:
- لم تقم بوضع عنوان مصدر الملفات من شبكة الانترنت بطريقة صحيحة، تأكد من وضع هذا العنوان كما أوضحنا سابقاhttp://referencesource.microsoft.com/symbols
- لقد قمت باختيار عنوان مجلد لا تملك صلاحية التعديل فيه.
- لقد قمت باختيار مجمع غير موجود في القائمة أعلاه.
- تأكد إن كنت تملك نسخة أخرى من إطار العمل .نت مثبتة على جهازك، قد يحصل هذا إن كنت تستعمل مثلا النسخة التجريبية Beta من نظام التشغيل windows server 2008، للتأكد من أنك تملك النسخة المتوافقة، اذهب إلى نافذة ال Modules بالضغط على (CTRL+ALT+U) (ستظهر هذه النافذة أثناء عملية التنقيح فقط) و التأكد من أن رقم النسخة الخاص بالمجمع mscorlib.dll هو 2.0.50727.1433 كما في الصورة التالية، أو تأكد من أنك قمت بتثبيت الإضافة RTM Version of the .NET Framework 3.5. بصورة صحيحة.


- تأكد من وجود الملف symsrv.yes في المجلد \..\Microsoft Visual Studio 9.0\Common7\IDE و أعد تشغيل بيئة التطوير
3/ عندما أحاول فتح أو الدخول إلى نافذة الكود، أتلقى رسالة تقول "Source is not available for this location"أو تظهر لي رسالة الحوار السابقة، ما هو السبب؟
أولا عليك أن تطالع السؤال السابق لكي تتأكد من أن ملفات الPDB قد تم تحميلها بصورة جيدة، يمكنك التأكد من ذلك بمشاهدة العمود « Symbols Status »
إذا كان الحقل في الخانة « Symbols Status » يحمل العبارة "Symbols loaded." عليك بالتالي:
- إذا قمت بضبط Microsoft Symbol Serverسابقا، يمكن أن تكون قد قمت بتنزيل ملف ال PDB للمجمع لكنه لا يحتوي على معلومات عن الشفرة. حاول أن تغير مسار تخزين الملفات أو قم بحذف المجلد نهائيا و أعد عملية التنزيل بالضغط على الأمر Load Symbols (الطلع على السؤال التالي للمزيد من المعلومات).
- تأكد من أنك قمت بتفعيل خانة الخيار Enable Souce Server في نافذة الاعدادات على المسار التالي: "Enable Source Server" item on the Tools -> Options -> Debugging -> General
- تأكد من أن حسابك يملك صلاحية التعديل على مجلد التخزين (لمستعملي الفيستا بصفة خاصة)
4/ أنا أستعمل خادم مايكروسوفت Microsoft Symbol Serverلتنزيل ملفات الشفرات منه، ما الفرق بينه و بين الطريقة التقليدية؟
موقع Microsoft Symbol Server يوفر ملفات PDB بدون أي معلومات عن الشفرة بداخلها، هذه المعلومات تم حذفها قبل نشرها رسميا على الموقع الذي استخدمناه سابقا خلال هذا الشرح لتنزيل ملفات ال PDB.( http://referencesource.microsoft.com/symbols).

الهدف من إضافة مصدرين للملفات و هما العنوان السابق (
http://referencesource.microsoft.com/symbols) الذي يوضع قبل المصدر الثاني وهو عنوان خادم مايكروسوفت (Microsoft Symbol Server) هو تمكين المستخدم من القيام بعملية تنزيل مرة واحدة لجميع الملفات الخاصة بالمجمعات المستعملة من طرف المشروع (كما شرحنا في فقرة للمستخدمين المتقدمين) و الهدف هو تسريع العملية أكثر بالبحث عن معلومات الملف من المصدر الأول و من ثم تنزيله من المصدر الثاني ... قم بإضافة عنوان الموقع Microsoft Symbol Serverإلى قائمة المصادر - كما يظهر في الصورة ومن ثم قم بترجمة المشروع و عند الانتهاء قم بنزع العلامة صح من على مصادر التنزيل
عليك أيضا أن تعرف أن وجود مصدرين مختلفين سيولد مشاكل في حالة أن أردت أن تقوم بعملية تحديث (لمجلد ملفات pdb في القرص الصلب ) بتنزيل ملفات جديدة لمشروعك لأن بيئة التطوير ستواجه مشاكل وخلط بين المصدرين، لذلك يحبذ حذف المصدر الثاني.



5/ هل تعمل هذه الميزة مع النسخة 64-bit؟
نعم، لقد وفرت مايكروسوفت أيضا للنسخة 64 bit ملفات ال PDBs، وهي في مجملها تدعم في نفس الوقت جميع أنواع البنيات التحتية و لا تحتاج لوجود نسخ منفصلة لكل بنية.
6/ كيف لي أن أضع نقطة توقف داخل شفرة للفريم وورك .نت؟؟
نعم يمكنك ذلك، قم بوضع نقطة توقف عادية داخل الشفرة ، بعدها اضغط عليها بزر الفأرة الأيمن و اختر Location من القائمة المنسدلة كما في الصورة التالية :



بعدها اجعل الخيار "Allow Source to be Different" يحمل علامة صح و اضغط على موافق OK




سترى أن النقطة تعمل بصورة طبيعية.
إذا كنت تستعمل هذه الميزة بصورة متكررة، قم بنزع العلامة صح من أمام الخيار "Require source files to exactly match the original version." الذي تجده في تبويب Debugging من نافذة الإعدادات الخاصة ببيئة التطوير (Tools->Options->Debugging)
7/ لماذا لا تعمل بعض الأدوات مثل "Go To Definition"مع شفرة للدوت نت؟
إن عملية التنقل من المتغير إلى مصدر تعريفه داخل شفرة عادية تتخل عن حالة الشفرة المصدرية في الدوت نت لأن المعلومات الإضافية عن المتغيرات مثلا غير موجودة في ملف ال PDB لأنها تستعمل أثناء عملية ترجمة المجمع و تنفيذه.
8/ لماذا بعض العناصر (خصائص أو طرق) أو بعض المتغيرات المحلـية غير ظاهرة أثناء عملية التنقيح؟
بتات –Bits- الملفات الdll الخاصة بمجمعات مكتبات إطار عمل الدوت نت التي قمت بتثبيتها على جهازك هي في الحقيقة مجزئة، و هذا يعني أنها مجزئة لتحسين الكفاءة بتقليل المساحة المحجوزة. جزئ من عملية زيادة الكفاءة يتطلب حذف بعض المعلومات من ال Process الموجودة في الذاكرة (التي تستعمل فئات هذه المجمعات) و التي لا حاجة لها. إذن عملية تنقيح هذه المجمعات المجزئة تتأثر.
كما أن بعض المناطق في الشفرة المصدرية لا تقبل وضع نقاط توقف للتنقيح دخلها و لا تمكنك أصلا من تتبع عملية الترجمة سطرا سطرا بداخلها، لكن معظم الفئات قابلة للتنقيح.
9/ لماذا عملية تنزيل بعض ملفات الشفرات تتطلب وقت طويل؟
بعض ملفات الشفرات كبيرة جدا حوالي 1 ميغا وهي الملفات الضرورية في معظم الحالات للأسف.
10/ هل أستطيع تنزيل جميع الشفرات مرة واحدة؟
حتى الآن غير ممكن، لكن العمل جاري على قد وساق لتوفير هذه الإمكانية مستقبلا.
11/ عندما أقوم بتنقيح شيفرة بلغة الفيبي، مثلا تنقيح المجمع Microsoft.VisualBasic.dll أجد تعليقات في الأسفل مكتوبة بلغة السي شارب، هل هذه شائبة (خطأ)؟
ليس كذلك، في الحقيقة أثناء قيامنا بنشر الشفرات و إضافة تعليقات حقوق النشر إليها في أسف الصفحة، كان مولد الشفرات في ذلك الوقت لا يدعم توليد شفرات مكتوبة بنسق لغات مختلفة في نفس الوقت.
12/ لقد قمت بالدخول إلى ملف الشفرات وكل ما قد قمت بتنزيله كان ملفا فارغا؟
لقد رأينا هذا الأمر من قبل بشكل متقطع و لم نبحث في أسبابه، إذا رأيت نفس الشيء فالحل هو إعادة تشغيل الفجوال ستوديو ليقوم بإعادة تنزيل الملف أرجو أن تراسلنا (فريق التطوير الخاص باطار العمل) مع إعطاء الاسم المعطوب و تاريخ حدوث الخلل.
13/ ما الذي سيحدث إن قمت بتنزيل ملف تصحيح (HotFix) أو حزمة تحديثservice pack ؟ هل أستطيع أن أشاهد الشفرات الخاصة به؟
لقد قمنا ببناء نظام يمكننا من توزيع نسخ متعددة من شفرات خاصة بمنتج (حسب نسخته)، ولم نتخذ أي قرار حول كيفية توزيع هذه النسخ وهي اقتراحات مفتوحة للمستعملين و المبرمجين. مثلا، انه واضح أن عملية وضع شفرة خاصة بحزمة تحديث أمر مفروغ منه لكن الأمر صعب بعض الشيء في اتخاذ قرار حول وضع شفرة خاصة بكل عملية تصحيح، ولا نزال في حاجة إلى اقتراحات أو أي ملاحظات.
في انتظار اتخاذ أي قرار، عليك أن تعرف بأن ملفات ال PDB لا تتوافق مع بعض الشفرات الأصلية الخاصة بمجمع إن تم تحديثه بواسطة ملف تصحيح (HotFix). في هذه الخالات، نافذة ال Modules التي تكلمنا عليها سابقا ستخبرك بأن عملية تنزيل ملف الPDB الخاص بالمجمع غير ممكن. بافتراض أن نسخة جديدة من هذه الملفات تم نشرها، سيتعين عليك إعادة عملية التنزيل من جديد.
14/ هل أستطيع أن أدخل من المتصفح إلى موقع تنزيل ملفات ال PDB و أقوم بتنزيل الملفات يدويا؟
لا تستطيع، وستظهر لك رسالة الخطأ التالية: HTTP 400 (Bad Request)


}}}
تم الشكر بواسطة:



التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم