2017-04-02 3 views
0

나는 내가 images.I 함께 일하고 있어요스택 트레이스 - 다중 스레드에서 오류의 위치를 ​​지적

private static void OnGuiUnhandedException(object sender, System.Threading.ThreadExceptionEventArgs e) 
     {    
      MessageBox.Show(e.Exception.Message); 
      MessageBox.Show(e.Exception.StackTrace.ToString()); 
      MessageBox.Show(e.Exception.TargetSite.ToString());    
      Application.Exit(); 
     } 

이 예외

가 계속 윈폼 응용 프로그램에 Program.cs 파일을 withing에 처리되지 않은 예외를 잡으려고 다음 코드가

Object is Currently in use elsewhere

응용 프로그램은 동시에 2 명의 배경 작업자를 사용합니다. 오류의 정확한 위치/행 번호를 지적하려고했습니다. 스택 트레이스에서

이 내가

enter image description here

어떻게 내가 오류의 정확한 위치를 찾을 수 있습니다 무엇을 얻을? 그래서 나는이 문제를 해결하기위한 적절한 조치를 취할 수 있습니다.

답변

1

내부적으로 clrmd을 사용하는 비교적 새로운 그래픽 도구 인 Adplus,Windbg 또는 MemoScope.Net과 같은 Windows 디버깅 도구를 사용해야합니다. 아이디어, 시스템 문제, 특히 동기화, 데이터 구조/메모리 손상으로 인해 발생하는 다중 사용자/다중 스레드 환경에서 크래시, 중단과 같은 문제가 실행 시간에 스냅 샷/덤프를 생성하여 디버깅해야합니다. 올바른 Pdb 파일 (프로그램 디버그 데이터베이스)을 사용하여 분석해야하므로 예외/교착 상태가 발생하여 수정 조치가 호출 될 수있는 스레드 스택을 검토 할 수 있습니다.

당신이 제공 한 정보를 보면서 추측하는 것은 매우 어렵습니다. 무엇이 잘못 되었을지 모르겠지만, 여러 가지 배경 작업자가 처리를하고 있기 때문에 리소스에 대한 액세스가 필요합니다. 동기화되어 lock 또는 이와 유사한 구문을 사용하므로 둘 이상의 스레드가 동시에 액세스하려고하지 않습니다.

또 다른 질문은 여전히 ​​남아 있습니다. 현재 배경 직원 인 Async Await는 별도의 스레드에서 호출을 보내지 않으므로 여러 스레드로 인해 문제가 발생하지 않으며 훨씬 더 명확하게 구현됩니다.

+0

작업자 비동기 이벤트에서 GUI 요소에 액세스 할 때 문제가 발생했습니다. 작업자 완료로 이동했는데 문제가 해결되었습니다. :) 어쨌든 도움을 주셔서 감사합니다 ... – techno

+0

환영합니다. 다른 세부 사항, 그래서 좁히기가 더 쉬웠습니다. 그렇지 않으면,이 도구들은 그러한 비 기능적 문제를 발견하고 수정하는 데 꽤 표준적인 것입니다. –

+0

예 ... 비슷한 문제가 더 빨리 있었을 것 같아요 ... 좁히려는 시간이 많이 걸렸습니다. 그 때의 원인. 나는이 문제가 현재 해결 된 것으로 생각한다. 좀 더 시험 할 필요가있다. – techno