Mac OSX。 我运行一个应用,该应用会加载odbc驱动程序。我在system.log中看到消息:
malloc:***错误的对象释放的对象的校验和不正确- 释放对象ххх可能已被修改
另外,我有此驱动程序的c ++源代码,但看不到malloc / free问题所在。
我如何检测和定位xxx对象是什么?
答案 0 :(得分:1)
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
技巧。
详细信息here。