2013-07-02 2 views
7

내 응용 프로그램을 실행할 때 Visual Studio의 출력 패널에서 예외 로그를 ​​발견했습니다.System.Windows.Forms.dll에서 System.InvalidOperationException에 대한 세부 정보를 얻는 방법?

'System.InvalidOperationException'형식의 첫째 예외가 다음과 같이 응용 프로그램의 건축가가

가 system.windows.forms.dll

발생했습니다.

  • 두 번째 스레드 : "항목을 목록보기에 추가"또는 "항목을 목록보기로 변경"명령을 대기열에 넣습니다.
  • 주 스레드 : 대기열에서 대기열에서 제외하고 각 명령에 의해 정의 된 추가 또는 변경 작업을 실행합니다.

에서 호출 한 InvalidOperationException에 대한 세부 정보를 알고 싶지만 출력 패널에만 표시되므로 스택 추적보기에 표시되지 않습니다. 알 수있는 방법이 있습니까?

+0

전체 응용 프로그램을'try' /'catch'로 감싸고 있습니까? 모든 예외가 발생할 때마다 중단되도록 설정된 디버거에서 실행 하시겠습니까? – Bobson

+1

Program.Main 전체에서 try/catch를 설정하지만 InvalidOperationException을 catch 할 수 없습니다. – kobake

+2

'Debug -> Exceptions ...'로 가서'Common language Runtime Exceptions' 옆에있는'Thrown' 옵션을 체크하십시오. – Bobson

답변

11

을 찾는 가장 좋은 방법은 같은 예외가 트리거되는 것은 디버거가 모든 예외를 위반하도록 설정하는 것입니다.

Debug 메뉴로 이동하여 Exceptions...을 선택하고 Common Language Runtime Exceptions 옆에있는 Thrown 옵션을 선택하여이 작업을 수행 할 수 있습니다. .NET 처리 예외는 어디서 또는 처리되었는지 여부에 관계없이 중단됩니다.

으로 수정되지 않지만 문제를 확인하는 데 도움이됩니다.

+0

감사합니다. 예외가 발생했습니다! – kobake

1

다음을 수행하십시오 :

  1. 필요한 위치에 중단 점을 추가하는
  2. 중단 점을 마우스 오른쪽 버튼으로 클릭하고 "공격하면 .."
  3. 확인 상자 "메시지를 인쇄" (예 : funciton, stacktrace, 스레드 ID/이름, 프로세스 ID/이름 등)
  4. 인쇄 한 후 프로그램을 계속 실행하려면 해당 정보를 표시하는 토큰을 사용하십시오. 메시지 (즉, 중단 점에서 일시 중지하지 않으려는 경우), 체이 은 "실행 계속"상자


다른 사람에 의해 제안 된대로 가능성이하는 try/catch과이 기술을 결합하려는 것 CK. 나는 다른 사람의 대답에 제공된 코드를 반복하고 싶지 않지만 Brian의 try/catch을 사용하여 호출을 마무리 한 다음이 기술을 사용하여 중단 점을 설정합니다.


참고 : 또한이 기술을 사용할 수 있고, "중단 점 조건이"방법 (즉, 인쇄 결과) 및/또는 변경 값을 호출 (후자는 해킹의 비트, 비록입니다 64 비트 응용 프로그램에서 작업하는 경우에만 수행해야합니다). 이러한 추가 기능은이 경우 사용자에게 유용 할 수도 있고 사용하지 못할 수도 있습니다.

+0

감사합니다. 그러나 어디에서 예외가 발생했는지 모르기 때문에 중단 점을 추가 할 수있는 좋은 장소를 결정할 수 없습니다. – kobake

+0

이 경우, 현재 실행중인 함수의 이름 ('$ FUNCTION'이 토큰 임)을 출력하고 "실행 계속"상자를 true로 설정하는 몇 개의 중단 점을 설정합니다. 예외가 발생했다고 생각하는 곳의 전후에 설정 한 다음 거기에서 검색 범위를 좁 힙니다 (이진 탐색 만 생각하면 중단 점 만 있으면됩니다). –

1

은 사용이 같은 시도/캐치 :

try 
{ 
    //Some code here. 
    //Also, set your breakpoints here.   
} 

catch (InvalidOperationException exc) 
{ 
    MessageBox.Show(exc.ToString()); 
} 

catch (Exception exception) 
{ 
    MessageBox.Show(exception.Message); 
} 

예외 처리 C#을 (및 기타 언어)에서는 가장 구체적인 예외에서 적어도 특정 예외 형태로 이동합니다. 위의 예에서는 스택 추적을 MessageBox에 표시합니다.

+0

제안대로 try/catch 블록 모두에 catch (InvalidOperationException)를 설정했지만 응용 프로그램이 도달하지 않습니다 ... – kobake

관련 문제