如何检测内存分配/空闲错误的对象?

How to detect the object with memory alloc/free error?

本文关键字:错误 对象 分配 何检测 检测 内存      更新时间:2023-10-16

Mac OS X. 我运行一个应用程序,它加载了一个 odbc 驱动程序。我在系统中看到.log消息:

malloc:*** 错误,因为对象对释放对象的校验和不正确 - 对象 ххх 可能在释放后被修改

另外,我有这个驱动程序的 c++ 源代码,但没有看到 malloc/free 问题所在。

如何检测和定位对象 xxx 是什么?

macOS/OS X有一个名为Guard Malloc的东西,它包含许多机制,用于在故障点检测此类问题(可能是内存覆盖或释放后写入(。

要使用它,您所要做的就是在启动应用程序之前设置一些环境变量,并确保在加载libgmalloc.dylib的情况下运行,例如:

DYLD_INSERT_LIBRARIES=/usr/lib/libgmalloc.dylib MallocGuardEdges=1 myprog

如果MallocGuardEdges被记录为执行:

如果设置,malloc在大型分配之前和之后添加保护页。

文档也有这样说(我隐约记得必须这样做一次(:

要使用 Guard Malloc

启用调试,请将项目配置为在 Xcode 方案编辑器中使用 Guard Malloc 运行。

因此,这将避免对DYLD_INSERT_LIBRARIES技巧的需求。

完整的细节在这里。