2010-06-16 5 views
4

추가 답변 : 나는 사용자 지정 바인딩 엔진을 쓰고 있어요The uncatchable exception, pt 2catch 할 수없는 예외

; DataContext가 대상 요소에 설정되기 전에 내 변환기가 호출되고 있습니다. 이것은 DataContext가 결국 값을받을 때 업데이트 될 것이기 때문에 큰 문제는 아닙니다. 무슨 입니다 문제를 일으키는 NullReferenceException 때문에 DataContext null 때문에, 그 잡힐 싶지 않아지고 있어요. 내 값 변환에 예외를 잡으려고 시도하고있어 비록

:

try { 
    return ((MethodInfo)_member).Invoke(parameter, null); 
} catch { 
    return null; 
} 

은 어떤 이유로 디버거는 여전히이 시점에서 중단된다.

alt text http://i50.tinypic.com/2ewm6oo.png

은 (이 백업되는 스택 catch 블록이 어디까지 비트를 추적 - 실제 예외 _member 방법 안에 일어나는 홀수 부분이 아직 캐치 블록이 회색으로 중단 점이다. 절대로 도달하지 않습니다.)

이제는 예외가 잡히고있는 곳에서 다른 어셈블리에서 일어나기 때문일 수 있습니다. (재사용 가능한 클래스 라이브러리에서 이것을 패키징하려고하고 있습니다. 응용 프로그램 어셈블리의 메서드).

디버거가 없어도 테스트 응용 프로그램을 실행할 수 있지만 응용 프로그램이 좀 더 강력하고 일반적으로 예외 처리가 발생하기 때문에이 문제가 발생합니다.

일부 속성 또는 무언가 (또는 일부 반사 매개 변수가 누락 되었습니까?) 예외가 잡히지 않도록 사용할 수 있습니다 궁금하네요.

업데이트 : 나는이 사실을 반영하고 MethodInfo.Invoke를 사용해야하기 때문에 분명하다고 확신합니다. 그것은 예외가 NullReferenceException의 내부 예외가있는 "TargetInvocationException"중 첫 번째 것 같습니다. 호출 예외가 어떻게 든 호출 스택 외부에서 발생하므로 내부에 호출되지 않습니다. 쓰레드로는 아무 것도하지 않지만, 아마도 MethodInfo.Invoke 내부에서 암묵적인 쓰레드 - 시프 팅이 발생했을 것입니다.

누구나 내가 이것을 잡히게 만들 수있는 아이디어가 있거나,이 문제가없는 메소드 이름에서 메소드를 호출하는 다른 방법이 있을까요? 나는 좀 비좁은 데.

+0

베어 캐치 {...} 대신에 예외 (예 :'catch (Exception badness) {...} ')를 캡처하면 아무 것도 바뀌지 않습니까? –

+0

Nope ... 정확히 동일합니다 .. – devios1

답변

1

디버거 예외 설정을 확인하여 NullReferenceException이 던져지면 디버거가 중단 되라고 말하고 있는지 확인하십시오.

+0

여전히 디버거없이 실행될 때 내 예외 대화 상자가 표시되는 이유가 무엇인지 설명하십시오. – devios1

+0

이상한 점은 회색 배경을 가진 catch 블록이있는 디버거의 정확한 라인을 보여주고 있지만 catch 블록의 중단 점은 절대 적중하지 않는다는 것입니다. 이미지를 게시 할 것입니다 ... – devios1

+0

@chaiguy : 현재 PC가 회색 영역의 코드에 있었지만 그 안에 있지 않았을 때와 비슷한 것을 보았습니다. 현재 PC는 표시 할 수 없습니다 (소스 코드 없음). 디스 어셈블리 모드를 켜면 어떻게 될지 궁금하네요? –

0

나는 호출 후에 예외를 잡을 수 있고 그것을 잡는 데 필요한 반사 관련 메커니즘이 없다고 확신한다.

호출하는 메서드가 스레딩을 사용하고 자식 스레드에서 예외를 throw하는 것일 수 있습니까? 이렇게하면 try-catch 문을 종료하기 전에 완료되지 않은 임의의 스레드에서 예외가 발생하면 try-catch가 예외를 놓칠 수 있습니다.

+0

흠, 아니, 여기에 자식 스레드가 없습니다. – devios1

관련 문제