سؤال

ولدي التطبيق الذي يولد العمليات التابعة متعددة. قبل إطلاق طفل، وإنشاء المعياري وستدير يعالج إلى ملف سجل (على سبيل المثال، إذا أنا على وشك إطلاق procA، أنا خلق مقابض لlogA.log). أنا وضعت هذه المقابض على العمليات التابعة.

ومن خلال النظر مع ProcExplorer، أستطيع أن أرى أن <م> كل عملية تابعة لها مقابض ل<م> كل ملف تسجيل (حتى procA لها مقابض لوغا، logB، وما إلى ذلك). وهذا ما يخلق مشاكل لاحقة.

وأريد أن أكون قادرا على رؤية عندما procA يخلق المقبض إلى logB. أي ideeas؟

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

المحلول

وأحد الحلول الممكنة يمكن أن يكون التي تتعامل المشتركة بين أي العمليات التابعة خدمة الزبائن Beacause يتم إنشاؤها من قبل عملية الأصل إلى ملف.

وهذا هو الحل الوحيد الذي يمكن أن نرى لأنني لا أرى كيف يمكن أن يكون التعامل مع multpile (واحد إلى كل ملف السجل) في كل العمليات التابعة إذا قمت بتصميم بحيث يكون لديك فقط فار واحد للتعامل مع ذلك.

لماذا لا خلق مقابض الخاص في عمليات طفل؟ وأنا أعلم أنه لا يستجيب pricesly على السؤال ولكن من الواضح إذا procA تحتاج مقابض فقط لوغا سيكون أفضل لإنشاء المقبض لوغا في عملية طفل procA.

نصائح أخرى

هل يسأل كيف لاقتحام مصحح أخطاء عند عملية تابعة procA يخلق المقبض إلى logB؟ سوف نفترض أن كنت تستخدم ويندوز منذ ذكرتم عملية اكسبلورر.

واحد طريقة للقيام بذلك هو استخدام التسجيل Image File Execution Options مفتاح لتحديد أن يتم تشغيل كل مرة procA.exe، وتريد أن إطلاق المصحح. عندما يبدأ المصحح، يمكنك تعيين نقطة توقف في التعليمات البرمجية التي تخلق مؤشر إلى logB ومن ثم السماح تستمر هذه العملية. هذا يعمل مع أي مصحح (مثل WinDbg أو NTSD، أو أدوات التنميط مثل AQTime)، وليس مجرد برنامج Visual Studio.

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

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

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