سؤال

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

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

أسئلتي هي:

  1. كيف يحدث هذا التحسين من خلال Lauterbach؟
  2. هل هذا مفيد؟
هل كانت مفيدة؟

المحلول

هناك بضعة أشياء:

  1. فيما يتعلق بالبيان لقد وجدت أن بعض الوظائف غير مدرجة في المصدر أثناء محاولة العثور عليها من أجل وضع نقاط توقف"، ما عليك سوى التحقق من ملف ملف / خريطة الملف الذي يتكون من الوظائف المختلفة التي تم استخدامها في Build ومواقعها في الذاكرة وغيرها وإذا لم تجد وظيفتك هناك من مجرد النظر في التحسين [فقط يمكن أن يكون المشكلة].

  2. كما أشار بحق، لا يتم التحسين من قبل Lauterbach ولكن يتم ذلك من قبل المترجم. عادة، هناك مستويات تحسين مختلفة [في ARM لدينا O0-O2] حيث O0 هو أعلى مستوى ممكن ولكن يجب استخدام هذا فقط عندما يكون هناك إصدار إلى مستوى تحسين العميل آخر يجب استخدام O2 لتصحيح الأخطاء.

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

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

أتمنى أن يساعدك هذا.

-hjsblogger.

نصائح أخرى

يتم التحسين من قبل المترجم، وليس من قبل Lauterbach. يحاول المحول البرمجي تحسين إخراج لغة التجميع الخاصة به، والمعدات الافتراضية عادة ما ستتضمن الوظائف التي يتم استدعاؤها مرة واحدة فقط.

لتجاوز هذه التحسينات لأغراض الاختبار، يمكنك استخدام علامة التحويل البرمجي - no_inline..

Inlining وظيفة يتم استدعاؤها فقط مرة واحدة قد تتم من قبل المحول البرمجي.

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

العيب هو أن تصحيح الأخطاء يصبح أصعب، لأنه أثناء وظيفة تصحيح الأخطاء مختلطة مع المتصل.

WRT سلوك أداة التتبع الخاصة بك سؤالك غير واضح إلى حد ما.

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

  1. لن تظهر مكالمات الدالة المتنقلة كإجراء مكالمات فرعية في رمز التجميع - التعليمات البرمجية لتنفيذ الوظيفة تنبعث مضمنا عند النقطة التي تكون فيها مكالمة الوظيفة على خلاف ذلك (وهذا ما هو المدطى)

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

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

ما هي أسماء "وظائف الغموض"؟

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