Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C Valgrind-抑制文件太一般?_C_Memory Leaks_Valgrind_Suppress Warnings_Suppression - Fatal编程技术网

C Valgrind-抑制文件太一般?

C Valgrind-抑制文件太一般?,c,memory-leaks,valgrind,suppress-warnings,suppression,C,Memory Leaks,Valgrind,Suppress Warnings,Suppression,我是valgrind的新手,首先要注意的是,OS X El Capitan上的标准C库似乎在泄漏内存(可能丢失)。在多读一点之后,情况并非如此,可以使用抑制文件从valgrind泄漏摘要中排除系统库 我生成了一个这样的抑制文件(通过运行一个简单的程序)并将错误添加到抑制文件中。看起来是这样的: osx_el__capitan_c_lib.supp { <osx_el_capitan_c_lib> Memcheck:Leak match-leak-kinds: poss

我是valgrind的新手,首先要注意的是,OS X El Capitan上的标准C库似乎在泄漏内存(可能丢失)。在多读一点之后,情况并非如此,可以使用抑制文件从valgrind泄漏摘要中排除系统库

我生成了一个这样的抑制文件(通过运行一个简单的程序)并将错误添加到抑制文件中。看起来是这样的:

osx_el__capitan_c_lib.supp

{
  <osx_el_capitan_c_lib>
   Memcheck:Leak
   match-leak-kinds: possible
   fun:malloc_zone_malloc
   fun:_objc_copyClassNamesForImage
   fun:_ZL9protocolsv
   fun:_Z9readClassP10objc_classbb
   fun:gc_init
   fun:_ZL33objc_initializeClassPair_internalP10objc_classPKcS0_S0_
   fun:layout_string_create
   fun:_ZL12realizeClassP10objc_class
   fun:_ZL22copySwiftV1MangledNamePKcb
   fun:_ZL22copySwiftV1MangledNamePKcb
   fun:_ZL22copySwiftV1MangledNamePKcb
   fun:_ZL22copySwiftV1MangledNamePKcb
}
{
Memcheck:泄漏
匹配泄漏类型:可能
乐趣:malloc_zone_malloc
乐趣:_objc_copyClassNamesForImage
乐趣:ZL9protocolsv
乐趣:Z9readClassP10objc_classbb
乐趣:gc_init
乐趣:_ZL33objc_initializeClassPair_internalP10objc_classPKcS0_S0_
乐趣:布局\字符串\创建
乐趣:_ZL12realizeClassP10objc_类
乐趣:ZL22copySwiftV1MangledNamePKcb
乐趣:ZL22copySwiftV1MangledNamePKcb
乐趣:ZL22copySwiftV1MangledNamePKcb
乐趣:ZL22copySwiftV1MangledNamePKcb
}
现在我有几个问题:

  • 这个文件是否可能阻止我的实际代码泄漏(而不是系统libs)?我测试了一点明确泄漏/不泄漏的代码,它似乎工作得很好。但我怎么能确定呢
  • 默认输出电流如下所示(绝对不会泄漏):

    ==37004==Memcheck,内存错误检测器 ==37004==Julian Seward等人2002-2015年版权(C)和GNU GPL'd。 ==37004==使用Valgrind-3.11.0和LibVEX;使用-h重新运行以获取版权信息 ==37004==命令:./val.o ==37004== ==37004== ==37004==堆摘要: ==37004==在出口处使用:187个块中的22100字节 ==37004==总堆使用率:271个alloc,84个free,28340个字节分配 ==37004== ==37004==泄漏汇总: ==37004==肯定丢失:0个块中有0个字节 ==37004==间接丢失:0个块中有0个字节 ==37004==可能丢失:0个块中有0个字节 ==37004==仍然可访问:0个块中有0个字节 ==37004==抑制:187个块中的22100字节 ==37004== ==37004==对于检测到的和抑制的错误计数,请使用:-v重新运行 ==37004==错误摘要:来自0个上下文的0个错误(已抑制:18个来自18个) 正如您所看到的,抑制文件目前运行良好(没有显示为丢失的字节,等等)。但是堆摘要似乎不受抑制文件的影响(
    allocs
    /
    mallocs
    显示-它们发生在我的代码之外),泄漏摘要显示为抑制字段。是否有一种方法可以禁用此字段(标志或其他内容)并在堆摘要中抑制(
    allocs
    /
    mallocs
    )?
您如何确定这似乎是在征求意见。意见不在讨论范围之内stackoverflow@user3629249这绝对不是一种观点。我希望得到一个像你不能(肯定)这样的答案,因为抑制文件显式链接到系统库,并排除在这些库之外编写的代码。你怎么能肯定这似乎是在征求意见。意见不在讨论范围之内stackoverflow@user3629249这绝对不是一种观点。我希望得到一个类似于您不能(肯定)的答案,因为抑制文件显式链接到系统库,并排除在这些库之外编写的代码。。 ==37004== Memcheck, a memory error detector ==37004== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al. ==37004== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info ==37004== Command: ./val.o ==37004== ==37004== ==37004== HEAP SUMMARY: ==37004== in use at exit: 22,100 bytes in 187 blocks ==37004== total heap usage: 271 allocs, 84 frees, 28,340 bytes allocated ==37004== ==37004== LEAK SUMMARY: ==37004== definitely lost: 0 bytes in 0 blocks ==37004== indirectly lost: 0 bytes in 0 blocks ==37004== possibly lost: 0 bytes in 0 blocks ==37004== still reachable: 0 bytes in 0 blocks ==37004== suppressed: 22,100 bytes in 187 blocks ==37004== ==37004== For counts of detected and suppressed errors, rerun with: -v ==37004== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 18 from 18)