【问题标题】:Suppress Valgrind warnings from iOS SDK禁止来自 iOS SDK 的 Valgrind 警告
【发布时间】:2012-07-03 03:16:01
【问题描述】:

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

【问题讨论】:

  • +1,今天学到了新东西
  • 在 main.m 中您要禁止的任何警告?
  • @CodaFi 我收到一大堆“条件跳转或移动取决于未初始化的值”,如果我没记错的话,它们似乎都来自 SDK。请参阅 pastebin.com/fVHnhNh6 获取摘录。
  • This 可能会有一些用处。
  • I know your work ;)。无论如何,#pragma clang diagnostic push/pop 会修复其中的任何一个吗?

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


【解决方案1】:

看起来您可以修改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,表示无效或不匹配的free。

Overlap,表示 memcpy 中的 src / dst 重叠或类似功能。

Leak,表示内存泄漏。

还可以查看suppressing errors in the Valgrind docs 了解更多信息。 请注意,您可以拥有多个抑制文件,所以我只写您自己的,您以后可以随时删除。


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

未初始化值错误是您被警告未初始化值的地方(duh) - 但是,它仅在您有一个会产生影响的未初始化值时才会这样做,因为未初始化值还有其他用途。

通常,这些是允许传播的,直到您在“不应该”的地方使用它们。然后,只要您实际尝试使用它们,它就会报告这些值。

您已经知道您可以打开--track-origins=<yes|no> (默认为否)以找出它们来自哪里,并且看起来它们确实来自SDK。对于那些不知道的人,--track-origins 真的很有帮助,因为当它关闭时,您只知道未初始化的值正在以“危险”的方式使用,但您不知道未初始化的值来自哪里。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    • 1970-01-01
    • 2011-05-18
    • 2010-11-10
    相关资源
    最近更新 更多