作者:小5聊基础
简介:一只喜欢全栈方向的程序员,欢迎咨询,尽绵薄之力答疑解惑
编程原则:Write Less Do More遇到一个非常有趣的bug,使用VS2017调试运行.net core2.1 MVC项目时,程序本身运行的好好的,突然启动起来就报错 <br/>
不得不说,编码细节很重要
报错如下
- 启动时提示
- 页面报错提示
2、原因分析
1)在报错前,什么代码都未修改,然后网上找解决方案,对于这类问题都是千篇一律,基本都是在IIS环境出现,后来找到一个关键点,重定向。
2)然后从程序断点调式,确认Startup启动文件方法是否可以执行,确认可执行,初步排查应该不是这个环境出错
3)然后再到重定向里排查,因为MVC加了一个权限验证,未登录Redirect,发现公共控制器是可以进来
4)然后逐个排查分析,结果是在公共控制器的finally代码发生异常,注释掉代码,程序可运行
5)再排查到是运行如下代码直接自动关闭运行
Task.Factory.StartNew
分析来分析去,运行到这个代码又没有报错,已经加了try_catch,没有跳到catch
6)最后一拍大腿,天空飘来两个字WC,想起来了,再实体类里嵌套添加了实体类,写了一个非常经典的循环逻辑错误
public class OneEntity
{
public class int id {get;set;}
public class string name {get;set;}
}
public class TwoEntity : OneEntity
{
public PageEntity one
{
get
{
OneEntity oneEntity = new OneEntity();
oneEntity.page_index = page_index;
oneEntity.page_size = page_size;
return one; //此处是错误点,返回了自己本身,这里应该返回oneEntity
}
}
}
3、真正原因
编码逻辑问题,写了个无限循环,自己返回自己本身,所以,程序检查到无限循环后自动报错了