Visual Studio에서 디버깅 후 종료되지 않습니다.

안녕하세요. 프로그램 작성 중 문제가 생겨 질문합니다.

회사 프로그램을 개발하다가 UI를 만들고 F5를 눌러 실행을 했습니다.

정상적으로 프로그램 화면이 출력되고 바인딩 오류 등등 문제는 없었습니다.

그리고 윈도우 창을 닫았는데

디버깅 모드 종료가 되지 않습니다.

이유를 모르겠습니다.

이상 없었던 상태로 코드를 되돌린뒤 다시 해봐도 같은 현상이 발생합니다.

구글 검색을 해보니 스레드 실행 상태를 확인하란 말에 실행해놓은 스레드를 다 확인해봤지만 문제는 없었습니다.(정확히는 별도의 스레드로 실행시킨 것도 없었습니다. 다시 확인도 했습니다.)

Window_closing에 있는 문자열 출력까지 다 되고 나서 종료가 안됩니다.

MSDN에서 찾은 방법중 하나인 일시 정지후 스레드 확인해보란 답변처럼 확인을 해보았으나 제가 실행한것은 없네요.

그리고 작업 관리자도 확인해봤으나 닫기를 누르면 실행된 프로그램이 종료되면서 리스트에서 사라집니다.

무엇이 문제일까요???

더 체크해볼것이 있나요??

1개의 좋아요

메인 쓰레드가 살아 있나여?
살아 있다면 메세지 루프에 있는지 shutdown에 있는지 확인해 보심이 어떨까 싶네여

1개의 좋아요

메시지 루프에 shutdown이라는것이 어떤것을 의미하는지 잘 이해가 안되는데
어디서 어떤 것을 확인해야 할까요?
지금 환경은 .net6에 wpf로 작성하였습니다.

1개의 좋아요

추가적으로 Window_Closing이벤트에

Environment.Exit(0)을 넣으니 정상 종료가 되네요.

안써도 되던것이 왜이러는지…

좀 더 찾아봐야겠습니다.

1개의 좋아요

이게 도움이 될지 모르겠는데

저는 몇일 전 release로 나간 모듈에서 프로그램 다운 되는 현상이 있었습니다.
release 모드라 디버깅은 못하고 덤프 뜨고 스레드만 분석 했는데

다음과 같이 나왔습니다.

메인 스레드 콜스택인데 왼쪽이 정상인 프로세스
오른쪽이 다운된 프로세스 입니다.

왼쪽 같은 경우엔 메세지루프에 있는게 보입니다.

정상적으로 메세지 펌핑 하고 있는걸로 보이고

오른쪽 같은 경우엔
마지막에 shutdown 이 찍혀 있었습니다.

덤프로 원인 찾았었습니다.

추가로 Application.DispatcherUnhandledException 를 통해서
처리 되지 않은 예외를 관리 할수 있습니다.

4개의 좋아요

경험상 대체로 스레드 관련 문제가 있는 상황이었던 걸로 기억합니닷. =ㅁ=!

  • 개별로 생서한 스레드가 정상 종료 되었는지
  • Task 로 호출한 것 중 뭔가 계속 돌만한 것이 있는지
  • Timer 류의 tick 에 연결한 callback 이 잘 정리되었는지
  • 간혹 메모리 누수가 발생하는 지점에 뭔가 프로세스를 잡을 만 한 것도 체크

요정도를 먼저 살펴 보는 편인데

지금 상황이면 vs 에 pause 를 눌러서 의심가는 스택들을 따라다니거나
바이너리를 실행한 후 덤프를 떠서 확인해보는 방법정도가 있을 거 같아욤.

3개의 좋아요

실례합니다. 이런 덤프는 무슨 프로그램을 뜨나요?? 방법을 알수있을까요?

1개의 좋아요

위 화면은 Process Explorer 입니다.

비슷한 프로그램으로 Process Hacker 도 있고요.

저는 둘다 깔아서 상황에 맞게 씁니다.

덤프같은 경우엔 작업관리자 에서도 뜰수 있습니다.

image

그리고 당연히 위 툴들도 기능 제공해 주고요.

image

2개의 좋아요

감사합니다 의외로 쉽게 되는것였군요 ;

1개의 좋아요

모두 답변 감사합니다.

process explorer에서 별다른 특징을 찾지 못했습니다.
정상 종료되는 프로젝트와 비교했을때 차이점이 없더라고요.
(물론 제 실력 부족일수도 있습니다.)

아직 이유는 못찾았으나

static으로 클래스를 만들어 프로젝트 전체의 전역변수로 사용하였었는데

이걸 사용 안하니 정상 종료 됩니다.

static 클래스는 스레드관련 내용 없이 List와 각종 정수, 문자열이었습니다.

결론적으론 closing event에 environment.exit(0)로 종료하는것으로 마무리 되었고

추후에 해결되면 한번 더 댓글로 표시해놓겠습니다.

1개의 좋아요

혹시 Application.Windows 내에 잔여 Window가 존재하는지도 한번 확인해보시겠어요?

저도 Popup 용도로 사용하는 Window를 닫지 않아서 MainWindow가 닫혔는데도 프로그램이 종료되지 않았던 적이 있습니다.

만약 잔여 Window를 닫는 것이 힘들다면 Application.ShutdownMode를 OnMainWindowClose로 설정해보시기 바랍니다.

Application.ShutdownMode Property (System.Windows) | Microsoft Learn

3개의 좋아요