2011-10-21 2 views
3

내 응용 프로그램 중 하나에서 점점 더 많은 핸들을 관찰합니다. 이 숫자는 응용 프로그램을 사용하지 않고 약 1 초마다 증가하므로 백그라운드 처리 코드의 일부에서 핸들 누수가 있어야합니다.핸들 누출을 추적하는 방법은 무엇입니까?

어떻게 그러한 누출을 추적 할 수 있습니까? 이 문제를 해결할 수있는 도구가 있습니까? 트레이싱이 누수를 처리 할 때 찾을 패턴은 무엇입니까? 핸들 누출의 원인이되는 가장 일반적인 실수는 무엇입니까?

질문이 많지만 한 가지 질문에 충분히 관련되어 있기를 바랍니다. 미리 알려 주셔서 감사합니다!

답변

4

Process Explorer을 사용하시기 바랍니다. 관리자로 실행하여 모든 관련 데이터를 확인하십시오. 여기서 프로세스가 어떤 종류의 핸들을 가지고 있으며 과도하게 생성되었지만 free가 아닌지를 관찰 할 수 있습니다. 이것은 검색 범위를 좁히는 데 도움이됩니다. (제 경우에는 winsock의 동작에 대한 잘못된 가정 때문에 소켓이 누출되었습니다.) 어쩌면 관련 코드를 분리하여 여기에 게시하여 잘못된 것이 있는지 확인할 수 있습니다. 행운을 빕니다!

+0

+1 감사합니다. ProcessExplorer는 알고 있지만이 용도로 사용하지는 않았습니다. 누출되는 핸들은 섹션 핸들입니다. 후속 질문보기 : http://stackoverflow.com/questions/7846526/what-can-cause-section-handle-leaks – jpfollenius

5

일부 프로파일 러 (즉, AQTime)는 Windows 자원 응용 프로그램을 프로파일 링 할 수 있습니다. XE를 사용하는 경우 기본 버전의 AQTime을 사용할 수 있습니다.

실행 경로가 올바르게 실행되지 않으면 핸들 누수가 자주 발생하지만 Windows에서는 핸들이 매우 다양한 상황에서 사용되는 매우 일반적인 항목이며 어떤 종류의 핸들이 응용 프로그램 누수입니까?

+0

+1 감사합니다. 나는 AQTime을 시도해야한다. 내 앱이 섹션 핸들을 누설하고 있다는 것을 알았습니다. 후속 질문을보십시오 : http://stackoverflow.com/questions/7846526/what-can-cause-section-handle-leaks – jpfollenius

+1

AQTime과 같은 프로파일 러는 누출 된 핸들이 어디에 있는지 알려줍니다 만들어진. 프로세스 탐색기를 사용하면 호출 스택을 표시 할 수 있기 때문에 AQTime과 같은 방법으로 정보를 기록하지 않으므로 AQTime이 "무거움"이긴하지만 조금 더 어려워집니다. 또한 실제로 많은 호출을 기록하는 프로세스 모니터를 시도 할 수도 있습니다. 어쨌든 AQTime과 같은 프로파일 러를 사용할 수 있다면이 같은 것을 달성하는 데 가장 좋은 도구입니다. PE/PM은 AQTime 등을 설치할 수있는 시스템을 검사해야 할 때 매우 유용한 도구입니다. –

관련 문제