从iOS SDK中抑制Valgrind警告

时间:2012-07-03 03:16:02

标签: objective-c ios macos valgrind suppress-warnings

我跟着this approach在iOS应用上运行Valgrind。不幸的是,有关iOS SDK的警告几乎不可能找到与我的应用程序相关的任何警告。是否有Valgrind的iOS抑制列表,所以我不必自己生成它们?

1 个答案:

答案 0 :(得分:3)

看起来您可以修改main()中的代码,以便将适当的选项传递给Valgrind。 (请注意,这假设您正在运行memcheck,这是默认选项,以及您似乎从pastebin运行的内容)。

Valgrind / Memcheck预计将报告您已有的库的错误,包括Obj-C / iOS SDK。要阻止Memcheck报告错误,请使用以下命令:

这会自动生成抑制:--gen-suppressions=yes


您还可以/可能想要更深入一点并自定义您不想看到的内容:

添加要考虑的抑制文件: --suppressions=/path/to/file.supp.

  

抑制型(第二)行的格式应为:

     

Memcheck:suppression_type

     

Memcheck抑制类型如下:

     

Value1, Value2, Value4, Value8, Value16,表示使用1,2,4,8或16字节的值时出现未初始化的值错误。

     

Cond (or its old name, Value0),意思是使用未初始化的CPU条件代码。

     

Addr1, Addr2, Addr4, Addr8, Addr16,分别表示在1,2,4,8或16字节的内存访问期间的无效地址。

     

Jump,意味着跳转到无法追踪的位置错误。

     

Param,表示系统调用参数错误。

     

Free,表示免费或不匹配。

     

Overlap,表示在memcpy或类似函数中src / dst重叠。

     

Leak,意思是内存泄漏。

另请查看suppressing errors in the Valgrind docs了解详情。 请注意,您可以拥有多个抑制文件,因此我只需编写您自己的文件,以后可以随时删除。


但是,您可能希望查看为什么出现这些错误。看起来很多都是SDK,你可能想要忽略它们 - 但可能在打开轨道起点(你已经完成)并检查你自己的代码以防万一。

未初始化的值错误是您被警告未初始化值(duh)的地方 - 但是,只有当您有一个未初始化的值会产生影响时,它才会执行此操作,因为还有其他未初始化值的使用。 / p>

通常,允许这些传播,直到你“不应该”使用它们为止。然后,只要您真正尝试使用它们,它就会报告这些值。

您已经知道可以打开--track-origins=<yes|no>(默认为no)以查找它们的来源,看起来它们来自SDK。对于那些不知道的人来说,--track-origins确实非常有用,因为当它关闭时,你只会知道未初始化的值正以“危险”的方式使用,但你不知道未初始化的值来自何处从。

请记住,如果--undef-value-errors=no也被使用,Memcheck会拒绝将此设置为是。