2012-05-25 7 views
3

SOS 명령과 그 출력을 중심으로 작업하고 있지만 실제로 모든 유형을 얻는 방법이 아닌 것으로 나타났습니다. 어떻게 든 현재 사용 중입니다. 지금까지의 가장 좋은 방법은 !dumpheap -stat이지만 인스턴스가있는 유형 만 나열합니다. 그러나 ValueType이 박스 처리되지 않으면 해당 유형이 !dumpheap -stat에 표시되지 않습니다. (그들은 힙에 할당되지 않기 때문에 놀라운 일이 아닙니다.)! dumpheap -stat에 나열되지 않은 ValueTypes의 이름/MT를 얻는 효율적인 방법

제 질문은 : 현재 어떤 추가 ValueTypes가 존재하는지 파악할 수있는 효율적인 방법이 있습니까? 내 말은, 개별 힙 개체 (출력을 기반으로 한 !dumpvc <mt> <address>과 같은 것)를 검사 할 때 필요에 따라로드 할 수 있지만 표시되는 통계의 경우 유형 (인스턴스/클래스 정의)을 보는 것보다 간단한 방법을 통해 유형을 찾는 것이 좋을 것입니다. of) 모든 알려진 클래스를 사용하여 추가 ValueTypes를 사용하는지 확인합니다.

+0

이상한 질문입니다. 왜 프로그램이 System.Int32를 전혀 사용하지 않는다는 것을 알고 있습니까? ! dumpmodule -mt는 값 유형을 포함하여 모듈의 모든 유형을 나열합니다. –

+0

저는 Int32 및 유사한 기본 유형을 실제로 따르지 않습니다. 두 개 이상의 멤버가있는 복합 유형은 흥미로운 부분입니다 (예 :'System.Drawing.Color'). – Wormbo

답변

0

이렇게하는 데 효율적인 방법이없는 것 같습니다. 즉, 구조체 배열인지 구조체 필드인지에 관계없이 각 유형 !DumpHeap -stat이 반환되었는지 확인했습니다. 두 경우 모두 새로운 발견 된 구조체 형식에 구조체 필드가 ​​포함되어 있는지 재귀 적으로 확인해야합니다. 이 경우 struct 유형을 이미 본 적이없는 한 재귀가 필요합니다.

!DumpModule -mt은 옵션이 아니며, btw입니다. 예를 들어 System.Collections.Generic.List`1을 볼 수는 있지만 예를 들어 List 클래스