탐지된 예외 자체가 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
'source' 카테고리의 다른 글
Azure WebApp for Containers의 시작 시간 초과 증가 (0) | 2023.08.22 |
---|---|
Oracle SQL Developer의 워크시트 보기와 달리 결과를 텍스트로 보려면 어떻게 해야 합니까? (0) | 2023.08.22 |
스키마에 대한 MariaBD 대안 (0) | 2023.08.22 |
document.ready()에서 jQuery Deferred를 받을 수 있습니까? (0) | 2023.08.22 |
INNODB -> 기본 열이 0이어야 합니까 아니면 null이어야 합니까? (0) | 2023.08.22 |