【问题标题】:Valgrind detecting leaks from GNUstep (Objective-C) on UbuntuValgrind 在 Ubuntu 上检测来自 GNUstep (Objective-C) 的泄漏
【发布时间】: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


【解决方案1】:

好吧,您可以尝试不同的运行时...(apple vs gnustep)fix it yourself 或类似...或者如果它只是一个总是发生的泄漏,您可以忽略那个。并注意其他人...在苹果领域,我们依赖clang's static analysis,这在您的示例中应该不会显示内存管理问题。

【讨论】:

    猜你喜欢
    • 2015-04-29
    • 2012-06-22
    • 2015-02-28
    • 1970-01-01
    • 1970-01-01
    • 2012-10-06
    • 2020-05-01
    • 2016-08-08
    • 2011-04-19
    相关资源
    最近更新 更多