2010-03-12 3 views
3

BackgroundWorker 개체와 그 DoAsync() 메서드를 사용하는 간단한 WinForms 앱에서 일부 가져 오기 코드를 비동기 적으로 실행하고 있습니다. 나는 예외가 던져지고 실이 조기에 죽어 가고 있다는 것을 몰랐던 문제가있었습니다. 나는 결국 이것을 발견했으며, 이제 Unhandled exceptions in BackgroundWorker을 읽은 후에 예외가 발생하면 알 수 있습니다.BackgroundWorker에서 호출 된 코드에서 처리되지 않은 예외를 어떻게 디버깅 할 수 있습니까?

그러나 디버깅하는 동안 여전히 문제가 있습니다. 이 코드를 어떻게 디버깅합니까? 내가 BackgrounWorker를 사용하지 않는 테스트 애플 리케이션에서 실행할 수있을 것 같아요,하지만 이것을 디버깅 할 수있는 방법이 있습니까? 실제로 예외를 throw하는 코드를 단계별로 실행하면 예외가 발생할 때 단계별로 쫓겨납니다. RunWorkerCompletedEventHandler에서 예외를 다시 던지면 자연히 도움이되지 않습니다.

어떤 아이디어라도!? 미리 감사드립니다!

+0

이제 다른 답변을 볼 수 있지만 제목이 내 설명만큼 이해할 수 없습니다. 이 질문을 여기에두고 사람들에게 오래된 질문을하는 것이 이치에 맞습니까? 여기에 기존의 링크가 있습니다 : http://stackoverflow.com/questions/258662/unhandled-exceptions-in-backgroundworker –

+0

사실, 어떤 이유로, 나는 어디에서나 예외를 얻지 못합니다. DoWork 스레드에서 Visual Studio가 중단되었다고했던 것과는 달리 광산은 그렇지 않습니다! 나는 어디에도 try/catch를 가지고 있다고 생각하지 않는다 ... 기대되는 곳에서 깨지지 않는 이유가 있나? –

+0

Visual Studio의 예외 메뉴에서이 예외가 발생하지 않도록 할 수 있습니까? "AsynchronousThreaAbort"를 "Managed Debugging Assistants"아래에서 볼 수 있지만 아무 것도하지 않는 것 같습니다 ... –

답변

6

VS (Ctrl + Alt + E 또는 디버그 -> 예외 및 던져진 열에 확인란 넣기)의 "예외 예외"옵션을 사용하지 않는 이유는 무엇입니까? 예외가 발생하면 프로그램 실행이 중지됩니다.

+0

그래. 스레드에 의해 던져진 예외를 비활성화해야합니다. 나는 이것이 스레딩 문제라고 생각했습니다! –

0

Visual Studio에서는 소스가있는 경우에만 코드를 사용할 수 있습니다. 소스가 없다면 winDBG를 사용하는 방법을 배우는 것이 좋습니다. MS는 여기에 훌륭한 튜토리얼이 있습니다

http://blogs.msdn.com/tess/pages/net-debugging-demos-information-and-setup-instructions.aspx

그것은 학습 곡선을 가지고 있으며, 약간의 시간이 소요를하지만 난 그것을 가치가 발견했다. 이 도구를 사용하여 갑자기 충돌하거나, CPU를 멈추게하거나, 제대로 수행하지 않는 많은 응용 프로그램을 디버깅했습니다.

관련 문제