سؤال

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

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

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

لذلك أنا وضعت ptrace خيارات لمتابعة استنساخ الأحداث والبحث عن الحالة التي العلوي 16-بت تعيين PTRACE_EVENT_CLONE.ثم يمكنني استخدام PTRACE_GETEVENTMSG للحصول على الدار من مؤشر ترابط جديد.كل هذا يعمل بشكل جيد في اختبار صغيرة تسخير تطبيقات.ولكن لسبب ما هو الفشل عندما وضعت هذا الرمز في الصورة المصحح.(أحصل على "أي عملية من هذا القبيل" رمز الخطأ)

الشيء الوحيد الذي خطر لي هو أن ويندوز قد حكم أنه فقط الخيط الذي تعلق تطبيق يمكن الاستماع التصحيح الأحداث.هل لينكس ptrace مماثل التقادم ؟ إذا كان الأمر كذلك, لماذا قانون العمل الأخرى التصحيح الأحداث ؟

تحرير:

ويبدو أنه على الأقل waitpid يدعم انتظار من ترابط مختلفة الصفحة الرجل يقول:

قبل لينكس 2.4, الموضوع كان مجرد حالة خاصة من عملية ، نتيجة مؤشر واحد لا يمكن أن تنتظر على الأطفال من موضوع آخر ، حتى عندما هذا الأخير ينتمي إلى نفس الموضوع المجموعة.ومع ذلك ، POSIX يصف مثل هذه الوظيفة ، ومنذ لينكس 2.4 a موضوع يمكن بشكل افتراضي سوف انتظر على الأطفال الآخرين المواضيع في نفس موضوع المجموعة.

لذلك في معظم هذه ptrace القيد.

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

المحلول

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

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

إذا كنت ترغب, يمكنك تصفح مصدر رمز ptrace في النواة.تبدو على وجه التحديد ptrace_check_attach, الذي يطلق عليه من قبل sys_ptrace معظم الطلبات.فإنه يعود -ESRCH (يبدو وكأنه رمز الخطأ أنك تحصل على) إذا كان الهدف مهمة الأم ليست المهمة الحالية.

نصائح أخرى

كان عندي نفس المشكلة (بالإضافة إلى العديد من الآخرين!) في حين أن تنفيذ لينكس على جزء معين من ماكسين VM المصحح.كنت على صواب في تخمين أن مؤشر واحد فقط في المصحح يمكن استخدام ptrace للسيطرة على debuggee.نحقق ذلك من خلال إجراء جميع المكالمات إلى ptrace على مخصص الموضوع.قد تجد أنه من المفيد أن ننظر إلى LinuxTask.java, linuxTask.ح و linuxTask.ج الملفات في ماكسين المصادر المتاحة في kenai.com/projects/maxine/sources/maxine/show

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