요즘은 윈도우용 프로그램 개발을 잘 안하지만, 예전 경험을 살려 적어봅니다.
알려줬더니 옆에 네오술군이 프로그램 디버깅하는데 도움이 되었다하네요 ^^
소개드릴 프로그램은 Task Manager Extension 2.0 이라는 조그만 유틸리티입니다.
원버전은 CodeGuru 에서 공개된거 같은데 이게 CodeProject 쪽에는 업그레이드되서 등록되어 있네요
위 링크에서 프로그램 바이너리를 받아 실행하면 화면에는 아무런것도 나오지는 않습니다. (소스코드도 제공됩니다.)
작업관리자를 실행해보면 아래와 같이 화면이 바뀌어 있습니다.
위와같이 메뉴중간에 Extension 이란 메뉴가 추가되고 여러가지 기능들이 포함됩니다.
메뉴 이름만 봐도 아실수 있는기능들이라 딴거는 직접 해보심 될듯 합니다.
이중에 제가 주로 사용했던 기능은 아래 기능입니다.
디버깅용 프로세스를 선택한후 마우스 오른쪽 버튼을 누르면 위와 같은 메뉴가 나옵니다.
즉 해당 프로세스가 사용하는 파일,모듈(DLL),핸들 과 그 프로세스의 하위 윈도우와 쓰레드만을 보여주는 기능입니다.
예를 들어 핸들을 선택해보면 다음과 같은 화면이 나옵니다.
그 프로세스가 열고 있는 모든 핸들의 이름과 타입을 리스팅해서 보여줍니다.
제가 전에 하던 전화서비스용 음성처리보드 같은경우 각 음성채널을 오픈해서 핸들로 관리를 합니다.
이건 파일을 검색하거나 소켓을 사용하는등 윈도우의 모든 프로그램이 비슷합니다.
멀티스레드 같은경우 몇백개 부터 수천개의 핸들을 관리하는 경우가 생기는거죠. 시스템상 문제는 없습니다.
(윈도우 자체가 스레드 또는 프로세스상 몇개의 핸들을 관리할수 있게 해주는지는 잘 모르겠습니다 ^^;)
문제는 이런 핸들을 열고 잘 안닫거나 하는 상황이 생길때 문제가 발생한다는 것입니다.
물론 소멸자에서 처리를 해주던 예외처리를 하던 개발자는 항상 다 닫아주려고 하지만 세상일은 모르는것이죠 ^^
제 경험상 유명한 오픈소스 코드를 가져다 사용했던 프로젝트에서도 원 소스내부에 핸들누수 현상이 나서
문제가 발생한걸로 봐선 이는 누구나 겪을수 있는 문제라고 생각합니다.
중요한 팁은.. 이 핸들을 보는 창이 멀티로 열린다는 것입니다. 프로그램 실행도중에 이 핸들창을 여러개 띄우면
이전시점부터 현재시점까지 늘어난 핸들이 어떤것인지 파악할수 있다는것입니다. 물론 문자열 검색도 가능하구요.
멀티쓰레드 프로그램을 개발하거나 다양한 파일/소켓/핸들등을 여는 프로그램이 동작중에 이상현상이 발생한다면
한번 테스트 해보실만 합니다. ^^
이제 좀 관리하기 시작하는거냐?
이제 조금씩 시간이 나네. 다시 본래의 모습으로 복귀해야지 ㅎㅎ