[HttpGet]
[Route("{num}")]
public void GetTestList(int num)
{
int result;
try
{
if (num == 1)
{
int a = 10;
int b = 0;
result = a / b;
}
else
{
string str = null;
_logger.LogInformation(str.Length.ToString());
}
}
catch (Exception ex)
{
throw ex;
}
}
上述代码在 throw ex 那行会提示再次引发捕获到的异常会更改堆栈信息的警告,会建议改为 throw,那两者之间的区别是什么,不处理这个警告又会产生什么问题?
总结
堆栈信息是指报错时候提示的方法调用关系,如果是 throw ex 的情况,会警告再次引发捕获到的异常会更改堆栈信息,即无论是result = a / b;
还是_logger.LogInformation(str.Length.ToString());
这行产生异常,最终在报错信息中都会指向throw ex;
这行代码,如果改成 throw,报错信息则会指向result = a / b;
或者_logger.LogInformation(str.Length.ToString());
两行代码。
如果不处理这个警告,后续异常捕获又不细致的话,会无法知道具体是什么代码产生异常,对我们码农定位错误产生巨大麻烦。