我正在查看Unix中运行的进程的核心。 通常我可以自己工作并根据回溯来尝试识别内存问题。 在这种情况下,我不确定如何继续。
首先,回溯只给出3帧,我期待更多。 对于这些帧,所呈现的所有功能参数似乎完全无效。 没有我期望的。
某些指针参数与它们相关联 - 无法访问地址
的内存这会暗示某种完整的堆栈损坏吗? 我使用libumem运行该过程,并且所有缓冲区都被报告为干净。
umem_status也没有报道。
所以基本上我很难过。 可能的原因是什么? 我应该在代码中查找什么,因为libumem似乎没有报告任何错误。
有关如何调试内容的任何建议?我应该考虑mdb中的任何额外功能吗?
谢谢。答案 0 :(得分:4)
堆栈损坏听起来像是一种可能性。有些事要尝试:
答案 1 :(得分:3)
您可以查看使用Valgrind或ElectricFence是否可以提早破解。
答案 2 :(得分:0)
不应该libumem报告与电围栏相同的超限?
在测试环境中无法轻松复制,但在unix / solaris下的商业环境中核心发生但libumem没有显示任何不良,
答案 3 :(得分:0)
你的代码?当这种情况发生在我身上时,我总能找到同样的东西:一个空指针。它崩溃时看起来很可怕,但原因最终很简单。
答案 4 :(得分:0)
我确实遇到了类似的问题。 GDB的回溯没有帮助。 Valgrind来救我。
通过Valgrind运行您的应用程序。识别所有错误,如无效写入。分析这段代码,看看它们是否可以修复。
在我的情况下,我正在尝试无效写入(有时可能写入NULL),这显示其效果不是在该实例,而是在哪里。