تحطم تقارير الوكالة الدولية للطاقة عندما يقوم طلبي بإغلاق الجهاز العميل

StackOverflow https://stackoverflow.com/questions/755847

سؤال

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

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

  • كيف تعرف الوكالة الدولية للطاقة على هذه العملية قد علقت؟ يفترض أننا نقوم بتفتيص التطبيق أن يقول بشكل دوري "كل شيء طيب" إلى الوكالة الدولية للطاقة، ولكن من أين نضع ذلك بحيث يكون مضمونا أن يحدث في كثير من الأحيان كافية، ولكن ليس من المحتمل أن يكون على مسار رمز ينتهي به التطبيق عندما يكون مقفل.

  • ما هي المعلومات التي يجب على تقرير الوكالة الدولية للطاقة متى يحدث حادث؟ يحتوي Windows على واجهة برمجة تطبيقات تصحيح لائقة، لذلك أنا واثق من أن جميع البيانات المثيرة للاهتمام يمكن الوصول إليها، لكنني لست متأكدا مما سيكون مفيدا لتتبع المشاكل.

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

المحلول

تريد مزيجا من MinIDump (استخدم Drwatson لإنشاء هذه إذا كنت لا ترغب في إضافة رمز توليد تفريغ صغير خاص بك) و UserDump لتشغيل إنشاء miniDump على شنق.

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

أولا، تحقق من الكلاسيكية Bugslayer المادة فيما يتعلق بالتحطم والرموز، والتي لديها أيضا بعض المعلومات الممتازة فيما يتعلق بما يجري مع هذه الأشياء.

ثانيا، احصل userdump. مما يسمح لك بإنشاء مقالب، و تعليمات لإعداده لتوليد مقالب

عندما يكون لديك تفريغ، افتحها في WINDBG، وسوف تكون قادرا على فحص حالة البرنامج بأكملها - بما في ذلك المواضيع والاتصالات والتسجيلات والذاكرة والمعلمات للوظائف. أعتقد أنك سوف تكون مهتما بشكل خاص باستخدام "~ * KP."أمر في WINDBG للحصول على CallStack من كل مؤشر ترابط، وأمر"! أقفال "لإظهار جميع كائنات القفل. أعتقد أنك ستجد أن التعليق سيكون بسبب حالة توقف تام من كائنات المزامنة، والتي ستكون من الصعب تتبعها أسفل حيث تميل جميع المواضيع إلى الانتظار على مكالمة WaitforsingleObject، ولكن انظر إلى أسفل Callstacks لرؤية مؤشرات الترابط التطبيقات (بدلا من "إطار" الإطار "مثل الإخطارات الخلفية وإجراءات الشبكة). بمجرد ضناءها، يمكنك أن ترى ماذا تم إجراء المكالمات، ربما تضيف بعض أدوات تسجيل الدخول إلى التطبيق لمحاولة تقديم المزيد من المعلومات جاهزة في المرة التالية التي يفشل فيها.

حظ سعيد.

ملاحظة. ذكرني Google السريع بذلك: تصحيح الأخشاب الجميلة. وبعد (CDB هو خط الأوامر المكافئ ل WINDBG)

نصائح أخرى

يمكنك استخدام adplus. من أدوات تصحيح الأخطاء في Microsoft لنظام التشغيل Windows لتحديد تعليق. سوف نعلق بعمليتك وإنشاء تفريغ (مصغرة أو ممتلئة) عند تعليق العملية أو تعطلها.

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

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

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

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

هناك بعض الأشياء في CodeProject miniDumps., ، والتي قد تكون مثالا مفيدا. MSDN لديه المزيد من المعلومات عنها أيضا.

لا تهتم مع مراقب. اشترك في إعادة التبييض خطأ في Windows (Winqual.microsoft.com). سوف يجمعون شتوياتك. في الواقع، من المحتمل جدا أن يفعلوا ذلك اليوم بالفعل؛ لا يشاركونهم حتى التسجيل.

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