valgrind自己报告错误?

valgrind自己报告错误?,valgrind,Valgrind,我正在运行我的程序虽然valgrind,但它似乎是产生错误造成的工具本身?我的所有错误看起来如下所示,但从阅读其他帖子来看,似乎通常at行告诉您在程序中哪里发生了有问题的malloc,但我的at行都来自valgrind。这些是我程序中的合法错误吗 ==10551== 32,808 (24 direct, 32,784 indirect) bytes in 1 blocks are definitely lost in loss record 840 of 843 ==10551==

我正在运行我的程序虽然valgrind,但它似乎是产生错误造成的工具本身?我的所有错误看起来如下所示,但从阅读其他帖子来看,似乎通常
at
行告诉您在程序中哪里发生了有问题的malloc,但我的
at
行都来自valgrind。这些是我程序中的合法错误吗

==10551== 32,808 (24 direct, 32,784 indirect) bytes in 1 blocks are definitely lost in loss     record 840 of 843
==10551==    at 0x54D7: malloc_zone_malloc (in     /usr/local/Cellar/valgrind/3.8.1/lib/valgrind/vgpreload_memcheck-amd64-darwin.so)
==10551==    by 0x7C5171: NXCreateMapTableFromZone (in /usr/lib/libobjc.A.dylib)
==10551==    by 0x7C4722: _read_images (in /usr/lib/libobjc.A.dylib)
==10551==    by 0x7C39EB: map_images_nolock (in /usr/lib/libobjc.A.dylib)
==10551==    by 0x7C34F3: map_images (in /usr/lib/libobjc.A.dylib)
==10551==    by 0x7FFF5FC04936: dyld::notifyBatchPartial(dyld_image_states, bool, char const* (*)(dyld_image_states, unsigned int, dyld_image_info const*)) (in /usr/lib/dyld)
==10551==    by 0x7FFF5FC0467C: dyld::registerImageStateBatchChangeHandler(dyld_image_states, char const* (*)(dyld_image_states, unsigned int, dyld_image_info const*)) (in /usr/lib/dyld)
==10551==    by 0xA99ED9: dyld_register_image_state_change_handler (in /usr/lib/system/libdyld.dylib)
==10551==    by 0x7C204C: _objc_init (in /usr/lib/libobjc.A.dylib)
==10551==    by 0x6BB27: libSystem_initializer (in /usr/lib/libSystem.B.dylib)
==10551==    by 0x7FFF5FC13377: ImageLoaderMachO::doModInitFunctions(ImageLoader::LinkContext const&) (in /usr/lib/dyld)
==10551==    by 0x7FFF5FC13761: ImageLoaderMachO::doInitialization(ImageLoader::LinkContext const&) (in /usr/lib/dyld)
==10551== 
我用自制软件安装valgrind。这可能与此错误有关:

==10551== WARNING: Support on MacOS 10.8 is experimental and mostly broken.
==10551== WARNING: Expect incorrect results, assertions and crashes.

但是我只是想确保(以前使用过这个的人)这些错误不是来自我的程序。(我在10.8)

Valgrind将库函数的默认实现替换为分配和释放内存(malloc()、calloc()、realloc()、free()是最重要的),以跟踪对它们的调用并进行簿记。回溯显示malloc()调用的调用堆栈,该调用分配了从未空闲过的内存()。因此问题不在于malloc()本身,而在于调用malloc()的代码没有相应的free()

错误检查工具可以检测系统库中的许多问题,例如预装在操作系统中的C库。您无法轻松修复这些错误,但您不想看到这些错误(是的,有很多!),因此Valgrind会读取一个错误列表,以便在启动时抑制这些错误。生成系统时,./configure脚本将创建默认抑制文件

您可以随意修改和添加抑制文件,或者编写自己的抑制文件。允许使用多个抑制文件。如果项目的一部分包含无法或不想修复的错误,但又不想不断被提醒,则此功能非常有用

注意:到目前为止,添加抑制的最简单方法是使用核心命令行选项中描述的--gen suppressions=yes选项。这会自动生成抑制。但是,为了获得最佳结果,您可能需要手动编辑--gen suppressions=yes的输出,在这种情况下,建议通读本节


每个要抑制的错误都进行了非常具体的描述,以最大限度地减少抑制指令无意中抑制一组您希望看到的类似错误的可能性。抑制机制的设计目的是允许精确而灵活的错误抑制规范。

但是,这些行中没有一行在任何地方引用我的程序。它们都指向/usr/lib/。。。等等。所以我想我的代码很好。。将尝试在linux上运行valgrind。是的,如果您阅读回溯,您会看到它是关于动态库加载的。在映射库代码时,看起来像是无害的一次性分配一些“静态”数据结构。