2017-04-10 7 views
1

내 관리 프로세스의 GC 힙을 덤프하면 다른 유형과 마찬가지로 큰 문자열 객체가 많이 있음을 알 수 있습니다.문자열을 작성한 코드 줄, 메서드 이름, 클래스 이름 및 어셈블리까지 어떻게 추적합니까?

나는 그들 중 몇 가지에 신경을 집중 :. 문자열의 내용은 내가 매우 관심이 다른 것들 사이에, 무슨 얘기

> dumpheap -type System.String 
> !do <address> 

을 그래서, 문자열을 GC 루트까지 따라 갔다. 하지만 먼저 LOH에 있었는지 확인하고 싶었습니다.

> !gcwhere <address> 
> !gcroot <address> 

이제까지 얻을 수있는 내용입니다.

작성한 메소드의 메소드 설명, 해당 메소드의 선언 유형, 어셈블리 및 응용 프로그램과 함께 어디에서 (어떤 행의 코드를 작성했는지, preferrably! 해당 라인의 dumpil) 알고 싶습니다. 도메인이 어셈블리가로드되었습니다.

답변

1

.NET 프레임 워크는 응용 프로그램을 실행하기 위해 해당 정보를 필요로하지 않으므로이를 저장하지 않습니다. 또한 이러한 저장소를 활성화하는 GFlags +ust 설정과 유사한 플래그가 없습니다. 지금 도구로 가지고있는 것 (덤프 파일 또는 라이브 디버깅)으로는 불가능합니다.

ANTS memory profiler 또는 JetBrains dotMemory과 같은 메모리 프로파일 러가 필요합니다. 그것도 기본적으로 할당 데이터를 수집하지 않으며 당신은 그것을 활성화해야합니다. dotMemory의

스크린 샷 :

dotMemory Screenshot

+0

Thsnk 당신. 나는 dotMemory 라이센스를 가지고있다. 나는 그것을 사용할 것이다. –

+1

dotMemory는 처음부터 객체 할당을 수집 할 수 있으므로 프로파일 러에서 응용 프로그램을 시작할 때 "할당 즉시 수집"확인란을 선택해야합니다. https://www.jetbrains.com/help/dotmemory/2017.1/Configuring_Profiling_Process.html –

+0

예, 본 적이 있습니다. 라이센스 키를 기다리는 동안 현재 평가판을 사용 중입니다. 평가판에는 ** 즉시 할당 확인 ** 체크 박스가 비활성화되어 있으며 해당 답변에 ** 할당 할당 ** 버튼 Thomas 언급이 없습니다. –