跟踪内存泄漏
Posted
技术标签:
【中文标题】跟踪内存泄漏【英文标题】:Tracing memory leak 【发布时间】:2011-02-21 12:24:14 【问题描述】:我的可可应用程序中存在内存泄漏,我已尽一切可能找到它的所有者,但一直无法找到。几天前,当我实现 AsyncSocket 框架的 GCD 版本时,泄漏就开始了。我不知道是我自己的代码导致泄漏出现还是库本身。 Instruments 不提供良好的回溯。唯一模糊的一点:
0 libSystem.B.dylib calloc
1 CoreFoundation __addHandler2
2 Foundation +[__NSObserver isAnObserver:]
3 Foundation -[NSNotificationCenter removeObserver:name:object:]
4 Foundation -[NSNotificationCenter removeObserver:]
5 Foundation -[NSRunLoop(NSRunLoop) dealloc]
6 CoreFoundation CFRelease
7 CoreFoundation __CFFinalizeRunLoop
8 libSystem.B.dylib _pthread_tsd_cleanup
9 libSystem.B.dylib _pthread_exit
10 libSystem.B.dylib start_wqthread
有人可以为我指出进行更高级跟踪或逆向工程等所需的方向吗?
【问题讨论】:
【参考方案1】:您是否尝试过对您的应用进行构建和分析?这有助于发现有时可能被忽略的基于分配释放的内存泄漏。您还可以将库与导入项目的源文件一起使用,然后进行构建和分析以对库运行分析。
【讨论】:
【参考方案2】:如果您的某些对象将自己作为观察者添加到 NSNotificationCenter,请确保在这些对象被释放之前执行 removeObserver:。
【讨论】:
以上是关于跟踪内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章
检测代码中的 node.js/javascript 内存泄漏