이미 Close 된 Handle에 대한 Invalid Handle 이슈

Invalid Handle 문제 중에 많이 발생하는 pattern은 이미 Handle Close 했는데 이후에 다시 동일한 Handle Close 하려고 시도하는 경우가 빈번하다. 이 경우에는 Crash Dump를 받더라도 누가 이전에 Close 했는지 Trace 해보지 않는 한 문제를 Fix하기가 어렵다. 이러한 경우에, Debug Diagnostics Tool을 이용하여 다소 무식한 방법이 될 수도 있지만, kernel32!CloseHandle 에서 BreakPoint를 걸고 log를 남기는 방법이 유용할 수 있다.

 

Crash Rule에서 따라가다 보면, 아래와 같은 advanced Configuration 창이 있으며, BreakPoints를 설정할 수 있다.


BreakPoints를 Click 하면, Configure breakpoints 창이 나오고 add 하여 Kernel32!CloseHandle BP를 걸도록 설정한다.


Action Type은 Log Stack Trace 를 하도록 하고, Action Limit 0인데, 언제 문제 재현이 될지도 모르기 때문에 제한 없이(사실 Hard disk의 제약을 받는 다) Log FileCloseHandle이 불리는 경우의 stack을 남기도록 설정한다. 문제 재현까지 오랜 시간이 걸린다면, Log File이 상당히 커질 수 있으며, 문제를 Isolation 하기 어려운 상황이 올 수도 있기 때문에 여러 가지 상황을 고려하여 시도해보면 좋을 듯 하다.

by 강세윤 | 2008/10/24 15:24 | Windows debugging | 트랙백 | 덧글(0)
트랙백 주소 : http://byung.egloos.com/tb/4689962
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]

:         :

:

비공개 덧글

< 이전페이지 다음페이지 >