【发布时间】:2014-02-07 14:12:43
【问题描述】:
我正在尝试使用 valgrind 查找在带有 GNUstep 的 Ubuntu 上运行的 Objective-c 程序的泄漏。
但是,即使是下面的简单代码也会导致 valgrind 引发大量内存泄漏(主要来自 NSZoneMalloc)。
#import <Foundation/Foundation.h>
int main()
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[pool drain];
return 0;
}
在谷歌上搜索了一下之后,我确实发现这些泄漏是预期的:http://lists.gnu.org/archive/html/gnustep-dev/2004-08/msg00063.html
有没有人在 GNUStep 中使用过 valgrind?如果有人可以分享一些关于如何从 valgrind 抑制此类错误的经验,那就太好了。因此可以清楚地检测到“真正的”泄漏。
【问题讨论】:
-
好吧,您只创建了一个对象并立即返回...您可以有多少泄漏?
-
肯定丢失:150 个块中的 1,889 个字节
-
我反复看到此消息:1 个块中的 8 个字节在 1,224 的丢失记录 115 中肯定丢失 ==4714== 在 0x402BE68: malloc (in /usr/lib/valgrind/vgpreload_memcheck-x86 -linux.so) ==4714== by 0x44BFCEA: objc_malloc (in /usr/lib/i386-linux-gnu/libobjc.so.3.0.0)
-
看起来没有办法抑制,因为泄漏来自 libobjc.so.3.0.0。如果这被压制,所有将被压制。
标签: objective-c valgrind gnustep