2010-05-07 4 views
9

변수로 전달하지 않고 현재 예외를 검색하는 방법을 찾고 있습니다.변수를 전달하지 않고 현재 예외를 얻는 방법?

내가 현재 예외를 얻을 수 $ 예외를 사용할 수 있습니다, 다음 코드 시계 창에서

public void MakeItFail() 
{ 
    try 
    { 
     throw new FailException(); 
    } 
    catch // Yes I'm aware that this shouldn't be done, but I don't want to go through all the code base and change it 
    { 
     ShowMessage("An error occured"); 
    } 
} 

public void ShowMessage(string message) 
{ 
    // How can I retrieve the exception here 
} 

을 가정 해 봅시다. 동일한 코드가 있습니까?

+2

당신이하고있는 것에 대해 생각하는 것은 좋지 않습니다. 아주 나쁜. 멈춰. 하지 마. 아뇨. 하지마. 프레임 워크 설계 지침의 사본을 잡고 예외 처리 섹션을 읽으십시오. – Will

+1

@ 윌 - 당신이 그들의 애플 리케이션을 다시 작성하는 일을하고 싶지 않아요? – ChaosPandion

+0

코드베이스의 크기가 얼마나 큰지는 모르겠지만 돌아가서 모든 catch 절을 수정하는 데 시간이 걸릴 것이라고 생각합니다. 해결 방법 해킹을 구현하고 테스트하는 데 필요한 시간보다 적을 것입니다. 장기적으로 그것을 유지하는 데 필요합니다. –

답변

8

아니요, 없습니다.

매개 변수를 사용해야합니다.

+0

ICorDebugThread.GetCurrentException()을 사용하여 가능한 한 어려운 방법에 대해 읽었지만 시도하지 않았습니다. –

+0

이것은 관리되지 않는 디버거 API의 일부입니다. 디버거에서 일시 중지 된 프로세스에서만 사용할 수 있습니다. 프로세스가 자체적으로 디버깅 할 수 없으므로 첫 번째 프로세스를 디버그하고 해당 API를 호출하려면 두 번째 프로세스를 작성해야합니다. – SLaks

+1

그리고 나는 그 토끼 구멍을 내려 가지 않을 것입니다. P –

3

앱을 처음로드 할 때이 이벤트에 가입 해보십시오.

AppDomain.CurrentDomain.FirstChanceException += (s, e) => 
{ 
    ShowMessage(e.Exception.Message); 
}; 
+0

aww that.net 4 만 있습니다. 이것은 기존 프로그램이며 아직 4.0으로 변환하지 않습니다 –

+2

@ 피에르 - 업그레이드해야 할 또 다른 이유 ... – ChaosPandion

+2

그레이트 또 다른 보안 구멍 ... –

관련 문제