2009-10-27 2 views
-1

try/catch 블록 내에 문이 있지만 예외가 발견되지 않습니다. 아무도 설명 할 수 있을까요?시도/catch 블록이 예외를 catch하지 않음

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

소스 오류 :

Line 139:    try 
Line 140:    { 
Line 141:     return (int)Session["SelectedLeadID"]; 
Line 142:    } 
Line 143:    catch (Exception ex) 

업데이트 이 제품은 ASP.NET 응용 프로그램입니다. catch 블록에서 새로운 예외가 throw됩니다. 표시되는 코드는 ASP.NET 오류 페이지에 표시됩니다.

+8

catch 블록에있는 내용을 표시하지 않았습니다. 예를 들어,"throw; "문이 있습니까? –

+0

try/catch 블록의 전체 코드 표시 –

+0

예, 지금은 새로운 예외의 InnerException 예외 - 나중에 로깅이 추가됩니다. – avesse

답변

4

catch 블록은 예외를 catch해야하지만 거기에 다시 throw되지 않도록해야합니다.

또 다른 작은 의견 : 저는 VS에서 꽤 많이 속임을당했습니다. 디버그 모드에서 실행되는 동안 예외가 발생하기 때문입니다. 단순히 '계속'또는 'F5'를 눌러 응용 프로그램이 작동하지 않는지 확인하십시오. :)

+0

아니요, 불행히도 중단됩니다. 다시 throw하지만 응용 프로그램이 호출 스택을 더 이상 중단시킬 것으로 예상합니까? – avesse

+0

올바른 방법으로 다시 발생시키는 것을 기억하십시오. http : // /stackoverflow.com/questions/178456/what-is-the-proper-way-to-re-throw-an-exception-in-c – cwap

4

코드에서 재현 할 수없는 세부 정보를 추가해야 할 것으로 생각됩니다. 특히 (이미 언급했듯이) 우리는 catch 내부를보고, 예외가 실제로 try 안에 있고 다른 곳에서 던져지지 않은 것을 확인해야합니다.

다른 가능성 :

  • 당신은 그 자체가 당신이에 닷지라고 점점 Dispose() (using 등)
  • 이 예외
  • 던지고 예외 처리기 내부 사기 코드가 있습니다. NET 1.1 및 throw 된 것은 (코드에서 표시되지 않음) Exception이 아니지만 일부 다른 객체
2

디버거 만 예외를 위반하고 VS2005 이상을 사용하는 경우 Common-Language-Runtime-Exception 중 하나가 활성화 된 경우 Debug-> 예외 ... 아래에 확인해야 할 수 있습니다. 그렇다면 디버거가 항상 예외를 catch하지만 계속할 수 있습니다.

정상 실행으로 되돌리려면 간단히 목록에서 적절한 예외를 선택 취소하십시오.

0

코드는 끔찍한 IMO처럼 보입니다. catch() 블록에 무언가가 있으려면 다른 return ... 문을 사용해야 함을 의미합니다. AFAIK 다음 코드를 더 쉽게 만들려면 각 함수의 끝에서 항상 단일 return 문을 가져야합니다.

이 어쩌면 당신의 코드가

public int Function() 
{ 
    int leadID = 0; 
    try 
    { 
    int leadID = (int)Session["SelectedLeadID"]; 
    } 
    catch (Exception ex) 
    { 
    ... 
    } 
    return leadID 
} 

단일 출구 지점과 같아야을 수행 할 코드를 쉽게 가정된다, 즉 것 같아요? 어쨌든 유용한 도움을 얻으려면 더 많은 기능을 게시해야합니다.

+0

This 문법적 인 것이기 때문에, catch 블록으로 돌아가거나 다중 반환을하는 것은 본질적으로 잘못이 아닙니다 (다중 중단 점을 사용하여 코드를 더 간단하게 만들 수도 있습니다). 이것은 어쨌든 질문에 대한 대답이 아닙니다. (저는 매우 늦었습니다) –

-3

예외 대신 "System.Exception"을 사용하십시오.

catch (System.Exception ex)

은 내가 "사용하여 Java에 의한이 동일한 문제를 가지고 있었다.Lang; "

+0

이것은 태그에 따라 C# 용입니다. – eltiare