2011-09-25 3 views
6

모든 실행 줄마다 스택 및 힙의 내용을 볼 수 있습니까? 닷넷의 메모리 할당과 할당 해제에 대한 명확한 아이디어를 얻으 려하므로보고 싶습니다. 함께하면C# .Net에서 힙 및 스택 내부의 오브젝트를 볼 수있는 방법

답변에 대한 의문을 해소 할 수있는 문서 나 링크가 있다면 공유하십시오.

+1

데이터의 * 많은 * 그리고 그것은 당신에게별로 알려주지 않을 것입니다. (또는 더 나쁜 것은, 당신이 보았던 20 개의 라인에서 어떤 쓰레기도 수집하지 않는다는 불평을하게 될 것입니다.) 메모리 할당과 가비지 수집에 의문이 있거나 질문을하거나 높은 수준의 설명을 구하십시오. 물건을 깨끗하게해라. – delnan

+0

물론, 앞으로는이 작업을 확실히 수행 할 것입니다. – funsukvangdu

답변

2

SOS 또는 PssCor은 측면을 따라 시작하는 것이 좋습니다. WinDbg

일단 분류하면됩니다. WinDbg를 프로세스에 연결하고, 디버거 확장을로드하십시오. 예를 들어 :

.load C:\pathtoextensions\psscor4.dll 

는 그 후, 당신은 !dumpheap 또는 !dumpstack 명령을 실행할 수 있습니다.

이 두 명령의 출력은 매우 비쌉니다. !dumpheap -stat은 힙에 대한 "통계적"개요를 제공합니다. 할당 유형, 할당 된 수 및 모든 할당에 대한 총 바이트 수.

이것은 매우 간단한 작업이 아닙니다. 이전에 WinDbg를 사용하지 않았다면 WinDbg로 충분한 연습을하는 데 시간이 걸릴 것입니다.

!bpmd을 사용하는 방법에 중단 점을 설정하고 위에서 언급 한 명령을 사용한 다음 p 명령을 사용하여 단계를 건너 뛰고 명령을 다시 실행하십시오.

나는 ANTS Profiler 또는 dotTrace과 같은 다른 상업적 도구가있어 작업이 완료 될 것이라고 확신하지만 어느 도구를 사용해도 많은 경험이 없습니다.

일단 시작하면 SOS 또는 Psscor에 대해 (새로운) 더 구체적인 질문을 할 수 있습니다.

3

스택 :

var stackInfo = new StackTrace(); 

힙? 아니요, 프로파일 러, 디버거 또는 적절한 API를 사용해야합니다. 간단하지 않은 작업. 당신이 그것을 시도하고 어려움이 있다면, 가장 구체적인 질문을하는 것이 가장 좋습니다.