刚修改的服务,推到开发环境之后,总是时不时的崩溃,但是不知道为什么。尝试找到他的最后一次调用,也没有复现。 没有办法,只能抓dump了。 开启崩溃自动dump,网络上很多,不赘述了。 拿到dump之后,首先看看是什么类型的异常 如图所示,是个栈溢出的异常。 打印一下堆栈,发现密密麻麻的全是这个代码。
刚修改的服务推到开发环境后,经常出现崩溃的情况,但原因却难以捉摸。尝试找到最后一次调用,却无法复现。
为了解决问题,只能进行dump抓取。
开启崩溃自动dump,网络上有很多相关方法,这里就不再赘述。
拿到dump后,首先需要查看异常类型。
从图中可以看出,出现了栈溢出异常。
打印堆栈后,发现代码中充斥着这个异常。
我们找到了这个对象,发现其中的隐式转换代码存在问题。
隐式转换应该是将传入的内容转换为指定的格式,但结果在返回时却返回了传入的类型,导致在尝试转换为目标类型时再次触发了隐式转换,从而导致无限递归。
最后,排查项目中所有类似代码,发现只有这一处存在问题。如果没有使用windbg,基本上很难找到具体原因。Windbg真是牛B。
小编推荐阅读