문제가 있습니다. 개발중인 응용 프로그램 사용자 중 한 명이 가끔은 있지만 정기적으로 응용 프로그램이 멈추는 현상이 발생합니다.프로덕션 .Net 데스크톱 프로그램에서 진단 응용 프로그램이 응답
이 경우 시스템의 이벤트 로그에 "Application hang [my app], 버전 [올바른 버전], hang 모듈 hungapp, version"이라는 유익한 메시지가있는 "Application Hang"소스가있는 항목이 있습니다 0.0.0.0, 행 주소 0x00000000. "
내 응용 프로그램이 처리하지 않은 모든 처리되지 않은 예외를 로깅하고 있으며 이런 일이 발생하면 내 로그 파일에 항목이 없습니다.
내 현재 작동 가설은 응용 프로그램이 안전하지 않은 기존 API를 호출하는 중에이 중단이 발생하고 있다는 것입니다. 이것은 나를 놀라게하지 않을 것이다; 수년 동안이 API를 사용하여 작업 해 왔지만 이전에는 멈추지 않았지만 진정으로 진절머리 나는 코드입니다. 또한 사용자가 프로그램이 임의의 시간에 응답하지 않는 것으로보고합니다. 나는 이것이 사실이라고 생각하지 않는다. 아니, 나는 그녀를 믿을 수는 없지만, 레거시 API와 통신하는 코드는 BackgroundWorker에 의해 호출되는 메서드 내에서 실행 중이다. 백그라운드 스레드가 응용 프로그램을 멈추게 만들었다면 사용자에게 무작위로 발생하는 것처럼 보일 수 있습니다.
두 가지 질문이 있습니다. 하나는 구체적이고 하나는 일반입니다.
특정 질문 : 비 UI 스레드에서 실행되는 메서드가 멈추는 경우 스레드를 죽일 것으로 예상됩니다. 실제로 전체 응용 프로그램을 죽일 것입니까?
일반적인 질문 :
처리되지 않은 모든 예외를 이미 로깅하고 있습니다. 내 프로그램은 이미 추적을 사용하도록 설정되어 있습니다 (의심스러운 메소드의 활동을 추적하기 위해 계측 코드를 추가해야 할 필요가 있습니다). 내가해야 할 다른 일이 있습니까? .NET 응용 프로그램이 중단 될 때 일종의 사후 충돌 분석을 허용하는 진단 도구가 있습니까? .NET 프레임 워크 내부에 더 많은 (더 유용한) 데이터를 캡처 할 수있는 메커니즘이 있습니까?
편집 : 내 코드를 자세히 살펴보면 BackgroundWorker의 모든 사용법은 예외 처리기에서 호출 된 메서드를 래핑하는 유틸리티 클래스를 통해 수행된다는 것을 기억하고 있습니다. 이 처리기는 예외를 기록한 다음이를 유틸리티 개체의 프로 포 셔널로 반환합니다. UI 스레드의 완료 이벤트 처리기는 예외를 다시 throw하지만 (호출 스택을 잃어 버리기 때문에 이상적이지는 않지만 이미 기록되어 있습니다) UI의 주 예외 처리기가 예외를 메시지 상자에보고 한 다음 종료합니다. 앱.
아무 것도 일어나지 않기 때문에 배경 스레드에 예외가 발생하지 않는다고 확신합니다. 어쨌든 .NET 예외는 없습니다.
또한 후속은 : 사용자의
자비 롭게, 지금 왔 충분한 데이터는 요령은 기존의 API 내부에서 발생되지 않는다는 것을 확신 할 수 있습니다. 이것은 분명히 내가 잘못하고있는 것을 의미합니다. 즉, 고칠 수 있기 때문에이기십시오. 또한 추적을 통해 문제를 격리 할 수 있음을 의미합니다. 이는 또 다른 이점입니다. 나는이 질문에 대한 답에 매우 행복하다. 나는 "아마이 문제에 대한 그들을 필요가 없습니다 심지어 행복 해요 또한
:.. PostSharp 뛰어난 당신이 기존 응용 프로그램에 계측 코드를 추가해야하는 경우는 거의 확실하게 그것을 사용해야
원격 디버깅이 필요할 수 있습니다. 일종의 원격 컴퓨터에서 디버깅을 사용하려면 VS DVD를 사용해야한다는 점에 놀랐습니다. 원격 기계의 주요 특징은 무엇입니까? 그것은 * 원격 *입니다. 약 80 마일 정도 떨어진 곳이야. –