안녕하세요. Winform .Net Framework 4.6.2에서 어플리케이션을 개발하고 있습니다.
어느 순간 UI가 멈추는 현상이 발견되어 이벤트 로그를 분석해보니
이벤트 아이디 1002 Application Hang 관련으로 UI 업데이트만 되지 않고 서비스는 운영 되는 증상이 있었습니다.
해당 이슈는 어떤 식으로 디버깅 하는게 좋을까요?
안녕하세요. Winform .Net Framework 4.6.2에서 어플리케이션을 개발하고 있습니다.
어느 순간 UI가 멈추는 현상이 발견되어 이벤트 로그를 분석해보니
이벤트 아이디 1002 Application Hang 관련으로 UI 업데이트만 되지 않고 서비스는 운영 되는 증상이 있었습니다.
해당 이슈는 어떤 식으로 디버깅 하는게 좋을까요?
어떤 곳에서 UI스레드를 꽉 잡고 놓아주지 않아서 그러는 것 아닐까요?
멈췄을때 당시 디버그로 해당 프로세스를 붙여서
디버깅 일시중지를 해보세요.
단순한 라이브 락 현상 이라면 위 방식으로 어떤 스레드에서 멈춰 있는지 확인 가능 합니다.
안녕하세요 이게 지나가다가…
이게 어떤 디버깅 방식인지 궁금해서 문의 드립니다.
실제 프로세스를 디버그를 붙일 수 있나요~!?
네,
실행되는 프로세스와 동일한 소스를 가지고 있고
pdb 파일만 있으면 가능 합니다.
이상하게 특정 업체에서만 UI가 죽는 현상이 나와서 이거참 난해하군요 VS를 깔수도 없고 ㅠㅠ
특정 환경에서만 문제가 발생되고
거기에 그 문제가 간혈적인 것이라면 정말 난감하죠.,
그럴땐 제 경험상으로 다음 순으로 해결을 하려고 했었던것 같습니다.
UI가 멈추는 곳 관련하여 모든 코드에 step by step 형태의 상세한 로그 작성.
=> 문제 재현시 로그 분석을 통해 의심 되는 부분 수정 후 모니터링
[1]번에서 해결이 안된 경우 미니덤프 작성
=> 사실 프로세스가 죽는 현상이 아닌 라이브 락 같은 현상으로 UI 행이 걸리는 경우는 덤프파일로 분석이 의미 없을 수 도 있겠지만… 덤프 파일로 도움이 되는 환경이라면 자체 판단 후 시도 및 모니터링
[2]번에서 해결이 안된 경우 몸으로(?) 해결
=> 별 수 있겠습니까… 개발자가 VS 설치 및 모든 개발 환경이 세팅된 노트북들고 현장에 출동 해서 직접 디버깅을 통해 원인을 찾아 냅니다.
단, ‘간혈적인 증상’ 이라면 해당 증상이 발생 됬을때 호출 받고 즉시 출동(?) 가능한 상태로 상시 대기를 해야 한다는…
덧, 내 코드는 99.9% 믿어 의심치 않다 할때
정말 해당 PC의 OS 라던지 기타 환경 문제일 가능성이 존재할 수 있기에
가능하다면 PC포맷 하고 다시 해보시겠어요…? 요청한다.
* (사실 UI 멈춤 현상은 거의 코드 문제에욤… )
중단된 순간에 메모리 덤프로 디버깅을 해보세요.
증상이 발생된 시점에 사용자에게 덤프 생성을 요청하여 파일을 전달 받습니다.
이때 배포된 실제 어셈블리 파일들과 PDB파일이 있다면 디버깅에 훨씬 수월합니다.
Visual Studio를 설치할 수 없는 환경이라면 dnSpy (dnSpyEx)를 사용해 보세요. 소스 코드가 없는 환경에서 어셈블리 파일 만으로 중단점, 호출 스택, 로컬 변수, 조사식, 스레드, 출력 등 Visual Studio의 기본 디버깅 기능을 사용할 수 있으며, 실행 중인 프로세스에 연결(Debug-> Attach to Process) 기능도 사용할 수 있습니다.
증상이 발생한 시점에 프로세스에 연결 후 중단 지점을 확인하시면 됩니다.
※ dnSpy는 개발 중단 되었고 포크인 dnSpyEx가 계속 업데이트 되고 있습니다.
2번이 확실해보이는군요 ㅋㅋ
자료 감사합니다 참고하도록하겠습니다.