【发布时间】:2011-09-20 05:45:10
【问题描述】:
我继承了大量遗留代码。到目前为止,它一直运行良好。突然在我无法在内部重现的客户试用中,它在 malloc 中崩溃。我认为我需要添加工具,例如在 malloc 之上我有自己的 malloc 来存储有关每个 malloc 的一些元信息,例如谁进行了 malloc 调用。当它崩溃时,我可以查找元信息并查看发生了什么。几年前我做过类似的事情,但现在想不起来了……我相信人们已经提出了更好的想法。很高兴有意见。
谢谢
【问题讨论】:
-
有人正在破坏内存(“罪魁祸首”)。坠机现场只显示“受害者”。除了使用专用工具(valgrind 等)之外,您还可以尝试以下操作:检查崩溃站点周围的内存(假设您有核心文件和符号)。使用
gdb,使用x/a <address、x/256wa $sp、x/s <address>等检查内存。查找任何可识别的模式并将其与代码中其他地方的数据匹配。如果幸运的话,您将使用此类数据追溯到潜在的“罪魁祸首”。