.NET 응용 프로그램에서 발생하는 핸들 누수를 조사해야하며 임의로 메모리 덤프를 처리해야합니다. 라이브 디버깅이나 모니터링을 할 수 없습니다.메모리 덤프에서만 .NET 응용 프로그램의 핸들 누수를 조사하십시오.
Visual Studio 2015, .NET 메모리 프로파일 러 및 Windbg에서 덤프 파일을 openend합니다. 내가 가장 많이 쓰레드 핸들 인 Windbg에서 100k 오픈 핸들을 나열 할 수있다 :
0:000> !handle 0006aaf8 f
Handle 0006aaf8
Type Thread
Attributes 0
GrantedAccess 0x1fffff:
Delete,ReadControl,WriteDac,WriteOwner,Synch
Terminate,Suspend,Alert,GetContext,SetContext,SetInfo,QueryInfo,SetToken,Impersonate,DirectImpersonate
HandleCount 3
PointerCount 5
Name <none>
Object specific information
Thread Id 1f24.1ce1c
Priority 10
Base Priority 0
그 후, 나는 붙어있다. 나는이 스레드 ID "1f24.1ce1c"로 무엇을 해야할지 모르겠다! 어떤 스레드와도 일치하지 않는 것 같다 (총 74 개 스레드). 내 관리 메모리와 관련하여 용의자가 보이지 않습니다. 일부 가이드는 추가 조사를 위해! htrace를 사용하도록 제안하지만, 내가 잘못 본 것이 아니라면 실행중인 프로세스에 연결할 때만 작동합니다.
나는 어떤 제안에도 감사 할 것입니다.
핸들 누출은 치명적인 버그는 아닙니다. 디버깅 또는 인스트루먼트 빌드를 프로파일 링하지 않고 핸들 누수를 찾을 수없는 이유는 무엇입니까? 물론 * mad *와 같은 핸들을 누출하지 않으면 핸들 누수가 크래시를 유발하지 않을 가능성이 있습니다.이 경우 디버그 빌드에서 문제를 재현하기가 쉽습니다. –
당신은 스레드 핸들이라고 말합니다. 스레드는 누가 작성합니까? 왜 코드를 대화식으로 디버깅 할 수 없습니까? 코드를 작성했거나 액세스 권한이 있습니까? –
문제를 찾아 내기 위해 [Debug Diagnostic Tool] (https://www.microsoft.com/en-us/download/details.aspx?id=49924)을 실행할 수도 있습니다. – Igor