سؤال

لو كانت لغتي C++ تعطل التطبيق على ويندوز كنت ترغب في إرسال مفيدة معلومات التصحيح إلى الخادم.

على لينكس أود أن استخدام جنو backtrace() وظيفة - هل هناك يعادلها ويندوز ؟

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

(نصيحة على غرار "اختبار لك التطبيق حتى لا تحطم" غير مفيدة!- كل غير برامج تافهة سوف يكون الخلل)

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

المحلول

وظيفة Stackwalk64 يمكن استخدامها لالتقاط تتبع مكدس على ويندوز.

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

يمكنك الحصول على بعض التعليمات البرمجية قيد التشغيل في العملية في وقت الحادث عن طريق أعلى مستوى __try/__except كتلة الدعوة SetUnhandledExceptionFilter.هذا هو قليلا غير موثوق لأنه يتطلب أن يكون لديك التعليمات البرمجية قيد التشغيل داخل تحطمت العملية.بدلا من ذلك, يمكنك فقط المدمج في نظام التشغيل Windows تقارير الخطأ إلى جمع بيانات تحطم الطائرة.هذا هو أكثر موثوقية ، لأنه لا يتطلب منك إضافة كود تشغيل داخل للخطر ، تحطمت العملية.التكلفة الوحيدة هي الحصول على شهادة توقيع التعليمات البرمجية ، حيث يجب تقديم وقعت الثنائية إلى الخدمة. https://sysdev.microsoft.com/en-US/Hardware/signup/ لديه المزيد من التفاصيل.

نصائح أخرى

يمكنك استخدام استدعاء API Windows MiniDumpWriteDump إذا كنت ترغب في لفة التعليمات البرمجية الخاصة بك.كل من ويندوز XP و فيست أتمتة هذه العملية يمكنك الاشتراك في https://winqual.microsoft.com للوصول إلى تقارير الخطأ.

تحقق أيضا http://kb.mozillazine.org/Breakpad و http://www.codeproject.com/KB/debug/crash_report.aspx عن حلول أخرى.

يوفر هذا الموقع جدا لمحة مفصلة عن كومة استرجاع على Win32 بعد الاستثناء C++:

http://www.eptacom.net/pubblicazioni/pub_eng/except.html

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

إنشاء ملف تفريغ مصغر.يمكنك ثم تحميل في windbg أو Visual Studio وفحص كامل كومة حيث وقع الحادث.

هنا مكان جيد لبدء القراءة.

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

لقد نشرت مقالة حول هذا منذ عدة سنوات.

انظر http://www.ddj.com/architect/185300443

اسمحوا لي أن أصف كيف التعامل مع حوادث في C++/WTL التطبيق.

الأولى في الدالة الرئيسية, اتصل _set_se_translator, و تمر في وظيفة من شأنها أن رمي الاستثناء C++ بدلا من استخدام منظم ويندوز استثناءات.هذه الوظيفة يحصل خطأ رمز, والتي يمكنك الحصول على Windows رسالة الخطأ عبر FormatMessage, و PEXCEPTION_POINTERS الحجة التي يمكنك استخدامها لكتابة تفريغ مصغر (مدونة هنا).يمكنك أيضا التحقق من رمز الاستثناء لبعض "الانهيار" الأخطاء التي عليك أن الكفالة من EXCEPTION_NONCONTINUABLE_EXCEPTION أو EXCEPTION_STACK_OVERFLOW :) (لو كان للاسترداد ، أنا مطالبة المستخدم البريد الالكتروني لي هذا ملف تفريغ مصغر.)

تفريغ الملف نفسه يمكن فتح Visual Studio الطبيعي المشروع ، وتوفير كنت قد خلقت .pdb الملف القابل للتنفيذ الخاص بك ، يمكنك تشغيل المشروع سوف تقفز إلى نفس موقع الحادث ، جنبا إلى جنب مع مكدس الاستدعاءات و السجلات التي يمكن فحصها من المصحح.

إذا كنت ترغب في الاستيلاء على مكدس الاستدعاءات (بالإضافة إلى غيرها من معلومات جيدة) عن وقت الحادث ، على بيان بناء حتى على الموقع, ثم تحتاج إلى إعداد الدكتور واتسون (تشغيل DrWtsn32.exe).إذا كنت تحقق من 'توليد تفريغ تعطل' الخيار عندما تعطل التطبيق سوف كتابة ملف تفريغ مصغر إلى المسار المحدد (تسمى المستخدم.dmp).

يمكنك أن تأخذ هذا الجمع بين ذلك مع الرموز التي تم إنشاؤها عندما بنيت الخادم الخاص بك (مجموعة في برنامج التحويل البرمجي/رابط لتوليد ملفات pdb - تبقى هذه آمنة في المنزل ، يمكنك استخدامها لتتناسب مع تفريغ حتى يتمكنوا من العمل على المصدر حيث وقع الحادث)

الحصول على نفسك windbg, فتحه و استخدام خيار القائمة 'تحميل تفريغ تعطل'.بمجرد تحميله كل شيء يمكنك كتابة '~#kp الحصول على مكدس الاستدعاءات لكل موضوع (أو انقر فوق الزر في أعلى الحالي الخيط).

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

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

يمكنك ثم تحميل ملف التفريغ إلى الملقم للحصول على مزيد من التحليل باستخدام تفريغ المحللات مثل windbg.

قد ترغب في استخدام adplus لالتقاط تحطم مكدس الاستدعاءات.

يمكنك تحميل و تثبيت أدوات التصحيح لـ Windows.

استخدام adplus المذكورة هنا:استخدام Adplus

وهذا يخلق كاملة تحطم أو تعليق تفريغ.وبمجرد الانتهاء من تفريغ ، Windbg يأتي إلى الإنقاذ.خريطة الصحيح pdbs و الرموز و كنت كل مجموعة إلى تحليل تفريغ.أن تبدأ مع استخدام الأمر "!تحليل-v"

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