2009-04-01 2 views
2

현재 작업하고있는 프로그램이 AppHangB1 문제 이벤트와 함께 중단됩니다. 특정 일련의 동작을 추적했지만, 코드를 단계별로 실행할 때마다 자체적으로 나타나지 않으므로 일종의 heisenbug 인 것으로 보입니다. 프로그램이 멈 추면 프로그램을 일시 중지하여 Visual Studio에서 멈추는 위치를 확인할 수 없습니다. 이 애플리케이션 (관리되지 않는 interop, 멀티 스레딩 등)에는 많은 일들이 일어나므로 특정 애플리케이션에서 잘못된 점이 많을 수 있습니다.WPF 응용 프로그램이 AppHangB1 문제 이벤트 이름과 충돌을 일으킬 수있는 원인은 무엇입니까?

나는 나를 위해 내 문제를 해결할 사람을 찾고 있지 않다. 이런 유형의 문제가 발생할 수있는 유형이 궁금하다. 나는 Google에서 몇 가지 히트 곡을 찾았지만 아무 것도 도움이되지 않았습니다. 문제를 정확하게 지적하는 데 도움이되는 .NET 응용 프로그램의 모든 디버깅 트릭도 도움이됩니다.

답변

6

UI 스레드가 메시지에 몇 초 동안 응답하지 않고 사용자가 종료하려고하면 AppHangB1 이벤트가 트리거됩니다. 중단은 코드에서 복잡한 루프, UI 스레드에서 네트워크 또는 디스크 I/O 수행, 장기 실행 작업을 수행하는 백그라운드 스레드가 보유한 잠금에서 차단되는 UI 스레드 등으로 인해 발생할 수 있습니다.

Visual Studio에서 중단 지점에서 중단 할 수 없다는 점에 대해서는 약간의 문제가 있습니다. 관리 전용 디버깅 또는 혼합 모드 디버깅을 연결하고 있습니까? Windbg (http://www.microsoft.com/whdc/devtools/debugging/default.mspx)를 사용하여 비 침습적으로 프로세스에 연결하고 중단 된 스레드의 스택 추적을 얻으려고 할 수 있습니다 (! clrstack을 사용하여 관리 스택 추적을 얻으려고합니다). Windbg의 학습 곡선은 꽤 가파르므로 Visual Studio에서 디버깅 할 수있는 덤프를 수집하고 싶을 수도 있습니다.

+0

내 디버깅 기술은 VS2008 도구를 훨씬 넘어서는 것이 아닙니다. 나는 과거에 WinDbg를 사용했으나 익숙하지 않았습니다. 응용 프로그램이 멈추는 경우 VS 나 WinDbg에서 추적을 얻을 수 없습니다. 내 애플 리케이션이 응답하지 않을 때 두 디버깅 애플 리케이션이 멈 춥니 다. 추적을 얻는 방법에 대한 제안? – bsruth

+0

원격 디버깅을 시도하십시오. 앱이 매우 이상하고 데스크톱을 호킹하는 경우 원격 디버그를하면 UI가 앱에 걸리지 않을 수 있으므로 도움이 될 수 있습니다. – Michael

관련 문제