كيفية المشي كائن الأصلي في WinDbg؟
سؤال
وأنا التحقيق ما تناول الكثير من الذاكرة في تطبيقي. باستخدام الأمر! DumpObj، ويمكنني أن التفاف على الكائنات المدارة. ولكن كيف أفعل ما يعادل لالكائنات الأصلية؟ على سبيل المثال، هذا الكائن. NET لديها مؤشر إلى التعليمات البرمجية الأصلية. انا عالق هنا ... كيف أفعل ما يعادل! DumpObj من هنا؟ لدي كل مصدر والرموز.
0:006> !DumpObj 0000000006222a50
Name: Beriliun.GS.Internal.Signer
MethodTable: 000007ff00658548
EEClass: 000007ff00734170
Size: 24(0x18) bytes
(d:\GS\bin\debug\LIBXT.dll)
Fields:
MT Field Offset Type VT Attr Value Name
000007fef02f8448 4000647 8 PTR 0 instance 000000002d7621e0 pSigner
0:006> !DumpObj 000000002d7621e0
<Note: this object has an invalid CLASS field>
Invalid object
المحلول
ويمكنك تفريغ الكائن عن طريق تشغيل الأمر التالي:
!object address.
وبالإضافة إلى ذلك أيضا رأس كائن يمكن ملقاة. رأس كائن يقع دائما في بايت 18H قبل الكائن في الذاكرة. يمكن أن تكون ملقاة مع الأمر التالي
!dt nt!_object_header address-18h
لمعرفة نوع قد ترغب في إضافة أيضا إلى تفريغ نوع الكائن. ويمكن تحقيق ذلك مع الأمر التالي.
!dt nt!_object_type address-of-type
وتتم طباعة عنوان من نوع كجزء من تفريغ رأس الكائن. اسم الحقل المقابل اكتب.
نصائح أخرى
والأمر د * يجب أن يوفر لك محتويات الذاكرة <وأ href = "http://blogs.msdn.com/debuggingtoolbox/archive/2008/02/23/special-command-analyzing-and-seeing-the-raw-call-stack-using-the-d-command -و-في-variations.aspx "يختلط =" نوفولو noreferrer "> د
وحدة دينارا! typedef وADDR
ومنها مثلا، دينارا MyModule! MyClass 0x12345678