كيفية تجنب "(خالية)" تتبع مكدس الذاكرة المؤقتة في DPH_BLOCK_INFORMATION؟
سؤال
وأواجه انفجار تعقب بعض الفساد الكومة. لقد مكن التحقق كومة الصفحة القياسية مع
gflags /p /enable myprogram.exe
وهذا ينجح في تأكيد الفساد:
=========================================================== VERIFIER STOP 00000008: pid 0x1040: corrupted suffix pattern 10C61000 : Heap handle 19BE0CF8 : Heap block 00000010 : Block size 00000000 : ===========================================================
عند أنتقل على التحقق كومة صفحة كاملة (gflags /p /enable myprogram.exe /full
) تحسبا أن هذا سوف يتسبب في حدوث خطأ في الوقت الذي قدم الفساد، وأحصل على شيء أكثر من ذلك.
ولقد بدأت للحصول على آمالي أثناء قراءة متقدمة Windows التصحيح: الذاكرة الفساد الجزء II-أكوام ، وهو الفصل من متقدمة Windows التصحيح أ >. أنا ركبت WinDbg ثم تحميل رموز التصحيح لuser32.dll
، kernel32.dll
، ntdll.dll
وفقا ل http://support.microsoft. كوم / كيلو بايت / 311503 . الآن عندما يوقف البرنامج في المصحح أستطيع أن يصدر هذا الأمر لعرض معلومات حول الصفحة كومة:
0:000> dt _DPH_BLOCK_INFORMATION 19BE0CF8-0x20 ntdll!_DPH_BLOCK_INFORMATION +0x000 StartStamp : 0xabcdaaaa +0x004 Heap : 0x90c61000 +0x008 RequestedSize : 0x10 +0x00c ActualSize : 0x38 +0x010 FreeQueue : _LIST_ENTRY [ 0x0 - 0x0 ] +0x010 TraceIndex : 0 +0x018 StackTrace : (null) +0x01c EndStamp : 0xdcbaaaaa
وأشعر باستياء من أثر (null)
المكدس. الآن، http://msdn.microsoft.com/ أون لنا / مكتبة / ms220938٪ 28VS.80٪ 29.aspx يقول:
والحقل تتبع مكدس الذاكرة المؤقتة لن دائما تحتوي على قيمة غير فارغة لأسباب مختلفة. ويدعم أولا وقبل كل كشف تتبع مكدس فقط على منصات x86 و الثانية، حتى على الأجهزة إلى x86 خوارزميات الكشف تتبع مكدس ليست موثوقة تماما. إذا كانت كتلة كتلة المخصصة تتبع المكدس هو لحظة التخصيص. اذا اطلق سراح الكتلة، تتبع المكدس هو لحظة الحرة.
اقتباس فقرة>ولكن أنا أتساءل عما إذا كان أي شخص لديه أي أفكار على زيادة فرص رؤية تتبع المكدس من لحظة التخصيص.
وشكرا لقراءة!
المحلول
وآه ها! تبين لي اللازمة لتمكين المزيد من الخيارات gflags
:
gflags /i myprogram.exe +ust
والتي لديها هذا التأثير:
ust - Create user mode stack trace database
ويبدو وضوحا عندما أرى وصف المعلمة. ما أغباني. ولكن يبدو لي أيضا أن الحاجة إلى تعيين حجم قاعدة البيانات التتبع قبل ان تصبح نافذة المفعول:
gflags /i myprogram.exe /tracedb 512
... أو أيا كان (في MB).
نصائح أخرى
ووفقا لمايكروسوفت، دالة malloc في C وقت التشغيل (CRT) وحدة تستخدم إغفال إطار المؤشر (FPO) في بعض إصدارات ويندوز. لا تستطيع رؤية المعلومات كومة كاملة من دالة malloc. (http://support.microsoft.com/kb/268343)
وإذا كان ذلك ممكنا، في محاولة لربط التصحيح النسخة CRT، على سبيل المثال الارتباط مع الخيار / MDD، من أجل حل هذه المسألة.