2011-05-16 5 views
5

Reflection (Method.Invoke)을 사용하여 .NET에서 함수를 호출합니다. 이 메서드 내에서 오류가 발생하고 예외가 발생하면 디버거는 실제 코드를 표시하지 않고 Invoke() 호출에서 중지합니다. InnerException에서 예외 정보를 검색 할 수 있지만 callstack을 사용할 수있는 일반 디버깅과 비교할 때 매우 불편합니다. Method.Invoke를 사용하여 호출 된 메소드는 일반적인 함수 호출처럼 디버깅 할 수 있습니까?.NET에서 호출 된 함수 디버깅

답변

0
내 해결 Tick() 내부 타이머 및 호출 방법을 만드는 것입니다

... 내 대답은 이해가되지 않습니다 추측 타이머 -> 진드기에 불행히도 그것은

6

타격을 좋아하는 대상은 "내 코드 만"기능입니다. 기본적으로 디버거는 개발자가 작성한 것으로 간주되는 코드로 디버깅을 제한합니다. 이렇게하면 WPF 또는 WinForms를 디버깅하는 데 많은 소음이 줄어 듭니다.

예외 조수와 같은 항목을 모든 코드에서 실행하려면 내 코드 만 사용하지 않도록 설정해야합니다.

  • 도구 -> 옵션
  • 디버거
  • 선택을 취소 "사용이 내 코드 만 디버깅"만약 모든 사람이
+1

불행하게도, "내 코드 만 사용"아주 예쁜 (그리고 적절한 경우에) 아니에요 이미 선택하지 않은이었다 함수 본문

있다. 하지만 호출자와 호출 수신자가 실제로 내 코드가되므로 관계가없는 것으로 보입니다. – John

+1

@ 존, 이상합니다. 내 다음 단계는 모든 예외 유형에 대해 "throw on break"를 켜서 내가 예상 한 곳에서 저를 버린 경우를 보는 것입니다. 그렇게해도 문제는 해결되지 않지만 앞으로 한 걸음 더 나아갈 것입니다. – JaredPar

+0

그건 아주 이상한, "던지기 중단"선회 후,로드 실패한 XmlSerializer 어셈블리에 대한 FileNotFound 예외가 나타납니다. "break on throw"없이는 모든 것이 잘 작동합니다. – John

2

당신은 또한 호출 얻는 방법으로 이런 일을 넣을 수 있습니다, 실패 :

#if DEBUG 
    System.Diagnostics.Debugger.Break(); 
#endif 

기본적으로 "프로그래밍 방식으로"중단 점이 발생합니다.

또한 수행하여이 약간 더 만들 수 :

if(Debugger.IsAttached) 
    Debugger.Break(); 

을 그래서 당신은 실제로 디버거에서 실행하는 경우에만 중단됩니다.


편집 : 당신이 그것을 편집하는 코드가있는 경우

이 두번째 생각에, 당신은 아마으로 VisualStudio를 통해이 정기적으로 중단 점을 부착 할 수 있습니다. > Method.Invoke를 통해 통화 기능 - -> 함수가를 설정

GUI 코드 : 미안 :

+1

당신의 대답은 완벽합니다. @ JaredPar의 대답에 대한 제 의견을 참조하십시오. 중단 점을 건너 뛰고 메서드가 작동하는 문제가 발생했습니다. – ajeh