سؤال

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

سؤالي هو: هل سنحصل على E&C على GDB؟ أتفهم أنها ميزة خاصة بالمنصة وتحتاج إلى بعض التعاون الخطير مع المترجم وتصحيح الأخطاء والنظام التشغيل (MSVC لديه هذا واحد سهل لأن المترجم وتصحيح الأخطاء يأتي دائمًا في حزمة واحدة), ، ولكن ... لا يزال يجب أن يكون قابلاً للتنفيذ. لقد سمعت شيئًا عن تطبيق Apple في نسختها من GCC بحاجة لمصدر. وأقول إنه ممكن بالفعل.

معرفة كل هذه الضجيج حول E&C's MSVC (تجربتي تقول إنها أول شيء يذكره مستخدمو MSVC عند الطلب "لماذا لا تتحول إلى Eclipse و GCC/GDB") ، أنا مندهش بشكل خطير أنه بعد بضع سنوات لا يزال لدى GCC/GDB مثل هذه الميزة. هل هناك أسباب وجيهة لذلك؟ هل يعمل أحد على ذلك ونحن نتحدث؟

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

المحلول

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

تريد الآن السماح بمجموعة معينة من التعديلات المحتملة على الكود و/أو البيانات ، دون إيقاف التصحيح وإعادة التشغيل. قد يكون أبسط تغيير سطر رمز إلى آخر. ربما تقوم بإعادة ترجمة هذا الملف أو هذه الوظيفة أو هذا السطر فقط. الآن عليك تصحيح صورة Debuggee لتنفيذ هذا السطر الجديد من التعليمات البرمجية في المرة القادمة التي تخطو فيها أو تعمل من خلالها. كيف يعمل هذا تحت الغطاء؟ ماذا يحدث إذا كان الرمز أكبر من سطر الكود الذي تم استبداله؟ كيف تتفاعل مع تحسينات البرمجيات؟ ربما يمكنك فقط القيام بذلك على هدف تصحيح تصحيح أخطاء ENC. ربما ستؤدي إلى تقييد المواقع المحتملة ، من القانوني لـ ENC. ضع في اعتبارك: ما يحدث إذا قمت بتحرير سطر من التعليمات البرمجية في وظيفة معلقة في مكدس المكالمات. عند إرجاع الكود هناك ، يقوم بتشغيل الإصدار الأصلي من الوظيفة أو الإصدار الذي تم تغييره مع خطك؟ إذا كان الإصدار الأصلي ، من أين يأتي هذا المصدر؟

هل يمكنك إضافة أو إزالة السكان المحليين؟ ماذا يفعل ذلك إلى كومة المكالمة من الإطارات المعلقة؟ من الوظيفة الحالية؟

هل يمكنك تغيير توقيعات الوظيفة؟ إضافة الحقول إلى / إزالة الحقول من الكائنات؟ ماذا عن الحالات الموجودة؟ ماذا عن المدمرين المعلقين أو النهائيات؟ إلخ.

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

بالنظر من النظام الإيكولوجي MS إلى النظام الإيكولوجي لـ GCC ، من السهل تخيل مشكلات التعقيد والتكامل عبر GDB/GCC/BinuTils ، وعدد لا يحصى من الأهداف ، وبعض التجريدات المستهدفة المحددة لـ ENC ، والطبيعة "لطيفة فقط" من ENC ، لماذا لم تظهر بعد في GDB/GCC.

اختراق سعيد!

) الفصل الذي لا يزال يتعين عليك الاستمرار في التشغيل. في مثل هذه البيئات ، لم يكن إصدار الكائنات افتراضية.)

نصائح أخرى

لست على دراية بـ MSVC's E&C ، لكن GDB لديه بعض الأشياء التي ذكرتها:

http://sourceware.org/gdb/current/onlinedocs/gdb/altering.html#altering

17. تغيير التنفيذ

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

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

مهمة: تعيين المتغيرات
القفز: الاستمرار في عنوان مختلف
إرسال الإشارات: إعطاء برنامجك إشارة
عودة: العودة من وظيفة
الدعوة: استدعاء وظائف البرنامج الخاص بك
ترقيع: تصحيح البرنامج الخاص بك
رمز التجميع والحقن: رمز التجميع والحقن في GDB

هذه إشارة جيدة إلى تنفيذ Apple القديم لـ "Fix and Contens". كما أنه يشير إلى تطبيقات العمل الأخرى.

http://sources.redhat.com/ml/gdb/2003-06/msg00500.html

هنا مقتطف:

إصلاح ومتابعة هو ميزة تنفذها العديد من أصحاب الأخطاء الآخرين ، والتي أضفناها إلى GDB لدينا لهذا الإصدار. توفر Sun Workshop و SGI Prodev Workshop و Microsoft's Visual Studio و HP's WDB و Sun's Hotspot Java VM هذه الميزة بطريقة أو بأخرى. لقد استندت إلى تنفيذنا على ميزة HP WDB Fix ومتابعتها ، والتي أضافتها قبل بضع سنوات. على الرغم من أن تنفيذي النهائي يتبع الخطوط العريضة العامة للنهج الذي اتبعوه ، إلا أنه لا يوجد رمز مشترك تقريبًا بينهما. بعض هذا بسبب الاختلافات المعمارية (كل من المعالج و ABI) ، ولكن أكثر من ذلك يرجع إلى اختلافات تصميم التنفيذ.

لاحظ أنه قد تمت إزالة هذه الإمكانية في إصدار لاحق من أدواتهم.

استكمال: ديسمبر -2012 هناك أ خريطة الطريق GDB عرض PDF يتضمن شريحة تصف "الإصلاح والمتابعة" من بين نقاط الرصاص الأخرى. تم تأريخ العرض التقديمي من 9 إلى 2012 ، لذا ربما يكون هناك أمل في إضافة هذا في مرحلة ما. كان العرض جزءًا من أدوات GNU Cauldron 2012.

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