سؤال

أقوم بتطوير تطبيق يعمل على SBC صغير يستند إلى Linux (~ 32 ميجابايت من ذاكرة الوصول العشوائي). للأسف، أصبح تطبيقي مؤخرا كبيرا جدا لتشغيله بموجب GDB بعد الآن. هل يعرف أحد بأي أساليب تصحيح أخطاء خفيفة الوزن جيدة يمكنني استخدامها في Linux المضمنة؟ حتى القدرة على عرض تتبع مكدس الخيط سيكون مفيدا للغاية.

يجب أن أذكر أن هذا التطبيق مكتوب في C ++ ويعمل مؤشرات الترابط متعددة، لذلك GDBSERVER هو عدم الذهاب لأنه لا يعمل مع تطبيقات متعددة المراحل.

شكرا مقدما،

مها

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

المحلول

يعمل GDBServer بالتأكيد مع تطبيقات متعددة الخيوط، وأنا أعمل على مشروع مضمن الآن مع> 25 مواضيع ونحن نستخدم GDBServer طوال الوقت.

info threads 

يسرد جميع المواضيع في النظام

thread <thread number from info threads>  

مفاتيح إلى هذا الموضوع من التنفيذ.

thread apply XXX <command>  

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

thread apply all bt

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

نصائح أخرى

لقد سمعت عن الأشخاص الذين يقومون بتحريك مثل تشغيل التطبيق في محاكي مثل Qemu ثم تشغيل GDB (أو أشياء مثل Valgrind) على ذلك. يبدو مؤلما، ولكن إذا كان يعمل ....

هل تحصل على أي مكان مع libunwind (للحصول على آثار المكدس) وتسجيل نمط الطباعة؟

طباعة الميناء التسلسلي هي الأكثر وزن خفيفة يمكنني التفكير في ~~~ ينظر بسهولة في جهاز كمبيوتر مضيف، ورمز وزن بسيط وخفيف داخل تطبيقك ~~

إذا لم يكن لديك منفذ تسلسلي، فقد استخدمنا منفذ GPIO ومحاكاة منفذ تسلسلي باستخدامه. لقد عملت بشكل جيد تماما، لكنها كانت بطيئة بعض الشيء :-( ~~~

هل هناك سبب لماذا بنيت مصححك الخاص؟ أقوم بتطوير نظام Linux باستخدام معالج ARM (AT91SAM926X) ونحن نستخدم كل من التحويل البرمجي والأصحابات من Codesourcery. لا أعتقد أنهم أصدروا إصدارا مع GDB 7 حتى الآن، لكنني أخطب تطبيقات C ++ متعددة مؤشرات الصوت باستخدام أداة GDBServer دون أي مشاكل.

تعمل GDBServer بالفعل مع تطبيقات متعددة مؤشرات الترابط. ومع ذلك، تحتاج إلى تجميع مصحح مصحح هدف متقاطع لمضيفك للحصول عليه للعمل مع GDB المستهدف.

انظر هذه المقالة للحصول على وصف مفصل لكيفية القيام بذلك:

تصحيح الأخطاء المرادلة عبر عن بعد مع GDB و GDBServer

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