解决的core,实际是早到导致core原因,一般要考虑
1 core现场是哪个数据出了问题,因为一般程序的错误会在编译的时候就发现了,core的时候往往都是数据有异常
2 复现的条件是什么
复现的条件是导致core的充分条件,但是不一定是必要条件,我们的最终目标是找到充分必要条件,同时在充分必要条件和core的结果之间找到因果关系。找到了充分条件,再在其中找到必要条件即可,找到充分必要条件。分析因果关系,往需要逆向分析,因为导致core结果的原因可能是很多步骤的。逆向分析需要了解内存的组织方式。包括数据结构的内存展开,栈的内存展开,代码的内存(汇编)展开,熟悉这些技巧,才能够在看到core文件后进行逆向分析。
对于内存的操作错误往往会隐藏很久,只要数据被再次使用的时候才暴露出来,如果是在析构的时候,暴露的更加隐蔽,因此此时函数的栈可能很深。
使用分析工具进行分析:gdb 进行单步调试,代码反汇编分析。