对于dump文件定位不到代码行的问题
- 检查选择的调试器类型是否正确。例如:对于C++和C#的混合代码,需要使用混合调试器,这样包含了C++非托管文件和C#的托管文件。
- 检查dump文件与日志文件时间是否匹配。当定位不到代码行时,可结合最后打印日志的时间定位哪行代码之后引起的crash问题。
崩溃问题常见处理方法
- 现象:程序直接闪退的crash问题
分析 :无效指针内存越界引起的
解决方法:
- 有相关dump文件:定位dump文件;
- 查看crash前最后一条日志,排查在该条日志之后可能的引起crash的操作;
需要注意的是, 对于可能引起程序异常的地方,需要try…catch处理。
- 现象:程序某个功能卡住,一段时间操作后整个程序卡住,然后crash退出;
分析:变慢卡住后卡死崩溃的问题,可能是某个线程死锁后,不断操作引起更多的线程死锁,最终导致卡死;
解决方法:
- 卡死后奔溃捕获的dump文件:该文件只能定位到最后奔溃的地方,可能是操作锁的地方,这时需要分析源文件其他操作该锁的地方,一般较难分析;
- 结合日志查看:根据开始卡顿的现象分析操作在源代码中位置,结合日志找到该操作的线程是什么;如果有卡死crash的dump文件,就结合当时堆栈信息查看该线程卡在了什么地方;这样就找到最初线程卡住的位置。但如果要明白最终卡死的原因,就需要分析该线程卡住之后对后续的操作的影响,比如会造成后面线程的死锁等。