2011-01-06 5 views
2

작성한 응용 프로그램에 문제가 있습니다. 기본적으로 사용자가 입력 한 코드를 기반으로 동적으로 생성 된 어셈블리가 생성됩니다.
컴파일되고 잘 실행되지만 어떤 이유로 컴파일 된 어셈블리에서 예외가 발생하면 모든 것이 try/catch 블록에 완전히 코팅되어 있어도 주 프로그램이 중단됩니다.동적으로 생성 된 어셈블리를 잡는 중 오류가 발생했습니다.

그것은 오류처럼 보이는
StringBuilder verificationErrors = new StringBuilder(); 
argz[0] = "hello!"; 
argz[1] = verificationErrors; 
object loResult = null; 
try 
{ 
    loResult = loObject.GetType().InvokeMember("doThis", BindingFlags.InvokeMethod, null, loObject, argz); 
} 
catch (Exception p) 
{ 
    MessageBox.Show(p.Message); 
} 

가 발생되고있다 :

나는 내 응용 프로그램에서 어셈블리의 호출 주위에/캐치를 생성 된 어셈블리에 사용자의 코드를 둘러싸고, 또한하려고 시도/catch 블록을 추가 내 애플 리케이션의 범위 밖, 그래서 그것을 잡는 방법이나 그 효과에 뭔가 ... 어떤 아이디어를 몰라?

+4

무엇이 오류입니까? –

+4

... 어떻게 어셈블리를 생성합니까? CodeDom? 반사. 다른 것? –

+0

컨트롤이''LoResult = .....'에 중단 점을 넣어 디버깅을 시도 했습니까? –

답변

0

p.Message를 호출하면 예외가 throw 될 수 있습니다. 우리는 기본 Message 속성을 사용하고 있다고 가정하지만 Message 속성을 무시하는 사용자 지정 예외 일 수 있습니다.

나는 catch 블록에 코드를 추가 try ... catch로 래핑하고, 오류가 발생하면 "예기치 않은 오류가 발생했습니다"라고 말하고 그것에 관해 할 수있는 모든 것을 기록하십시오.

+0

p.Message가 아니므로 빈 캐치를 넣으려고했지만 여전히 오류가 발생하지 않습니다. 오류는 생성 된 어셈블리 내부에서 함수를 호출하는 라인에서 발생합니다. 왜 사용자가 자신의 코드를 입력 할 수 있기 때문에 에러가 나는지 정확히 알 수는 없습니다. 그래서 잡을 수 있어야합니다. 사용자 코드 주위에 try/catch 블록이 있고 생성 된 어셈블리 함수가 호출되지만 처리되지 않은 예외를 말하는 앱이 계속 충돌합니다. – Brian

+0

SeleniumExceptions에 대한 특정 catch 블록을 넣을 수도 있습니다. SeleniumException 객체의 내부 특성을 알지 못하면 어떻게 동작하는지 알 수 없습니다. 내 말은, .net 프로그래머처럼 "catch (Exception e)"가 모든 것을 잡아야한다는 것을 훈련 받았지만 실제로는 예외 및 관련 코드가 CLR에 의해 처리되어야한다는 것입니다.또한 예외를 디버깅 할 때 호출 스택을 확인하고 확인하십시오 (디버그 ... WIndows ... 호출 스택). 그것은 당신에게 무슨 일이 일어나고 있는지에 대한 단서를 줄 수 있습니다. –

+0

디버깅 할 수 없을 때 마지막 조언. 로그 항목을 넣고 사용자가 컴파일 한 코드를 게시하고 게시하여 그 내용을 확인하십시오. –

0

디버그에서 프로그램을 실행하고 예외가 발생할 때 중단되도록 Visual Studio에 지시하면 스택 추적을 검사하고 예외를 throw하는 메서드를 확인할 수 있어야합니다.

  1. 이동 디버그에/예외 ...
  2. 이 열에서 "공용 언어 런타임 예외"앞에있는 상자를 선택는 "슬로우"
  3. "확인"을 클릭
  4. 실행 디버그 프로그램 모드
+0

동적으로 생성 된 어셈블리, 즉 어셈블리를 제어하는 ​​응용 프로그램을 디버깅 할 수 없기 때문에 많은 도움을주지 못합니다. – Brian

+0

그리고 어디에서 오류가 발생하는지 정확하게 알 수 있습니다. 사용자가 동적으로 생성 된 어셈블리에 C# 코드를 입력하기 때문에 오류를 방지 할 수있는 방법이 없습니다. 이것은 컴파일 에러가 아니며 때로는 발생하는 런타임 오류이지만 try/catch 내부에 직접 있더라도 잡히지 않습니다. – Brian

+0

게시 한 행 중 오류가 발생했습니다. –

관련 문제