문제

내 앱에서 많은 메모리를 취하는 것을 조사하고 있습니다. tumpobj 명령을 사용하여 관리되는 객체를 둘러 볼 수 있습니다. 그러나 기본 물체와 동등한 방법을 어떻게합니까? 예를 들어이 .NET 객체에는 기본 코드에 대한 포인터가 있습니다. 나는 여기에 갇혀있다 ... 여기에서 덤프가 어떻게 동등한 일을합니까? 나는 모든 소스와 상징이 있습니다.

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.

또한 객체 헤더를 덤프 할 수 있습니다. 객체 헤더는 메모리의 물체 이전에 항상 18 시간 바이트에 있습니다. 다음 명령으로 버릴 수 있습니다

!dt nt!_object_header address-18h

객체 유형을 덤프하는 것 외에도 원하는 유형을 알아 내기 위해. 이것은 다음 명령으로 달성 할 수 있습니다.

!dt nt!_object_type address-of-type

유형의 주소는 객체 헤더 덤프의 일부로 인쇄됩니다. 해당 필드 이름은 유형입니다.

다른 팁

d* 명령은 메모리의 내용을 제공해야합니다.

DT 모듈! typedef addr

예 : DT MyModule! MyClass 0x12345678

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top