source

탐지된 예외 자체가 null입니다!

factcode 2023. 8. 22. 22:33
반응형

탐지된 예외 자체가 null입니다!

ASP를 가지고 있습니다.NET 응용 프로그램.모든 것이 괜찮았지만, 최근에는 그 자체로 무효인 예외가 발생합니다.

try
{
    // do something
}
catch (Exception ex)
{
    Logger.Log("Error while tried to do something. Error: " + ex.Message);
}

가끔씩ex이라null그 자체!

감 잡히는 게 없어요?

여기까지 온 사람들을 위해, 저는 이것이 가능한 (디버거에서만 감지되는 경우) 인스턴스를 찾았습니다.VS2013 업데이트 4.

깨짐:

try
{
    // do something
}
catch (WebException ex) // <- both variables are named 'ex'
{
    Logger.Log("Error while tried to do something. Error: " + ex.Message);
}
catch (Exception ex) // <- this 'ex' is null
{
    Logger.Log("Error while tried to do something. Error: " + ex.Message);
}

해결책은 예외 변수의 이름을 다르게 지정하는 것입니다.

고정:

try
{
    // do something
}
catch (WebException webEx) // <- all good in the hood
{
    Logger.Log("Error while tried to do something. Error: " + webEx.Message); // <-
}
catch (Exception ex) // <- this 'ex' correctly contains the exception
{
    Logger.Log("Error while tried to do something. Error: " + ex.Message);
}

제 경우, 원인은StackOverflowException이러한 예외는 일반적으로 다음에 도달하지 않습니다.catch전혀 차단했지만, 이번에는 무슨 이유에서인지 이해할 수가 없어요, 그것은 실제로 도달했습니다.catch차단, 그러나 예외는null.

방금 누군가가 지나가는 문제에 부딪혔어요.ex.InnerException어떤 방법으로, 어디서.ex뿌리였습니다.파라미터도 호출되었기 때문에ex처음에 포착된 예외를 보았을 때 디버거에 약간의 혼란이 있었습니다.이것은 아마도 몇몇 부주의한 리팩터링의 결과일 것입니다.

예:

public void MyMethod(string input)
{
    try {
        Process(input);
    } catch (Exception ex) { // <- (2) Attempting to view ex here would show null
        _logger.log(ex);
        LogInner(ex.InnerException);
    }
}

private void LogInner(Exception ex)
{
    _logger.log(ex); // <- (1) NullReferenceExeption thrown here
    if(ex.InnerException != null)
        LogInner(ex.InnerException);
}

이는 다음과 같이 리팩터되었습니다.

public void MyMethod(string input)
{
    try {
        Process(input);
    } catch (Exception ex) {
        LogExceptionTree(ex);
    }
}

private void LogExceptionTree(Exception exception)
{
    _logger.log(exception);
    if(exception.InnerException != null)
        LogExceptionTree(exception.InnerException);
}

그런 일은 있을 수 없습니다.

네가 만약throw null당신은 받을 것입니다.NullReferenceException에서throw에 있어서의 예외.catch블록은 절대일 수 없습니다.null.

당신은 다른 무언가를 가지고 있습니다.null.

예외가 집계인 경우 이 문제가 발생할 수 있습니다.예외.

같은 문제가 발생했는데, 그 이유는 예외가 NullReferenceException이므로 ex를 사용할 수 없습니다.메시지가 표시되면 다음과 같이 시도해야 합니다.

try
 {     // do something } 

catch (NullReferenceException)
{
  Logger.Log("Error while tried to do something. Error: Null reference");
}

catch (Exception ex) 
{     
  Logger.Log("Error while tried to do something. Error: " + ex.Message); 
} 

언급URL : https://stackoverflow.com/questions/5634417/caught-exception-is-null-itself

반응형