2012-05-15 2 views
2

디버거를 실행하는 동안 UI가 차단되는 .NET Forms 응용 프로그램에서 문제를 진단하기가 어렵습니다.UI VS2010에서 디버깅하는 동안 블로킹

블록이 임의적이며 차단되는 동안 디버거 내에서 일시 중지 단추를 클릭하면 블록이 해제 될 때까지 일시 중지가 실제로 완료되지 않습니다.

디버거 외부에서 프로그램을 실행하고 차단하고 실행하지 않아도됩니다.

프로필러 (개미)를 사용하여 블록을 찾으려고 시도했지만이 상태에서는 차단되지 않으며 프로필러 보고서에 아무 것도 표시되지 않습니다.

응용 프로그램에는 소켓 연결 시간 초과를 처리하기 위해 백그라운드 스레드가 실행됩니다 (Threading.Timer는 UI와 통신하지 않습니다).

네트워크 작업에서 BeginXXX 호출을 사용하고 있습니다.

사용자를 위해 발생하지 않기 때문에이 문제를 찾기가 어려워 보이지만 이러한 블록이 발생하는 동안 프로그램의 다른 부분을 디버깅하는 것은 어렵습니다.

는 UI의 주요 초점은

내가 가능성이 발견에 볼 수 있나요, UI 스레드에서 주 개체 ( POSTerminal)에서 검색 자신의 연결 상태 기계의 그리드를 표시하는 사용자 컨트롤입니다 디버거/UI 차단 사이의 연결?

답변

1

나는 결국 이것을 추적했다. 무슨 일이 일어나고 있었는지 여러 스레드가 주요 양식으로 돌아가는 이벤트를 발생시키는 것입니다.

양식에서 InvokeRequired을 확인한 다음 BeginInvoke이 이벤트를 다시 메인 폼 스레드로 확인했습니다. 문제는 수천 개의 이벤트를 발생시키는 이벤트 발생에 버그가 있었으며 각각의 이벤트가 호출되어 양식 검사를 잠그는 것이 었습니다. 따라서 프로그램 (및 디버거)이 정지합니다.

디버거가 정지 할 것으로 예상하지는 않았지만 모든 잠금/호출이 처리되어 디버거에서 일시 중지/중지를 누를 때까지 수행되었습니다.

0

당신이 창 나사부 VS Debug-> 윈도우 -> 체크인 시도? 거기에 스레드의 상태를 볼 수있을뿐만 아니라 특정 스레드에서 일시 중지하기 위해 "스레드로 전환"할 수 있어야합니다.

+0

예, 불행히도 내가 말한 것처럼 블록이 완료 될 때까지 일시 중지조차 할 수 없습니다. 어느 시점까지 블록이 사라 졌는가? –

관련 문제