💡
原文中文,约6100字,阅读约需15分钟。
📝
内容提要
最近一位朋友遇到程序崩溃,错误码为c0000005,分析发现是空引用异常。尽管代码中有try-catch,但异常未被捕获,可能是CLR的bug导致。建议检查代码逻辑和CLR版本。
🎯
关键要点
- 朋友遇到程序崩溃,错误码为c0000005,显示为访问违例。
- 分析dump文件发现崩溃是由于空引用异常,代码中有try-catch但未捕获异常。
- 崩溃发生在JIT自动插入的this!=null防御性判断中,表明程序中存在this=null的情况。
- 程序没有走到CLR的异常处理链,导致异常信息未被记录。
- 怀疑是CLR的bug,可能在SuspendEE阶段遇到硬件异常,未能正确处理。
- 建议检查代码逻辑和CLR版本,确认是否存在已知的bug。
❓
延伸问答
程序崩溃的错误码是什么?
错误码为c0000005,表示访问违例。
导致崩溃的主要原因是什么?
崩溃是由于空引用异常引起的。
为什么try-catch没有捕获到异常?
程序没有走到CLR的异常处理链,导致异常信息未被记录。
崩溃发生在哪个阶段?
崩溃发生在JIT自动插入的this!=null防御性判断中。
建议如何解决这个问题?
建议检查代码逻辑和CLR版本,确认是否存在已知的bug。
这次崩溃是否与CLR的bug有关?
怀疑是CLR的bug,可能在SuspendEE阶段遇到硬件异常,未能正确处理。
➡️