为什么推断命令会产生误报错误?

Why infer command is producing false positive error?

提问人:Sazzad Hissain Khan 提问时间:1/11/2022 最后编辑:Sazzad Hissain Khan 更新时间:1/18/2022 访问量:128

问:

我在我的 iOS 项目中使用 CocoaLumberjack pod。

定义自定义宏,如,

#define SM_DDLogDebugConst(tag, frmt)   DDLogDebug(([NSString stringWithFormat:@"[DEBUG][%@] %@", tag, frmt]), @"%@")

在代码中,我使用了如下所示的宏,

int64_t startTime = [TimeUtils NOW]; // returns timestamp // line = 10
...
int64_t tempTime = [TimeUtils NOW];  // returns timestamp // line = 20
SM_DDLogDebug(TAG_Class, @"elapsed time: %lld", (tempTime - startTime));
...

问题是,当我运行时,尽管行中的变量已在日志记录中使用,但在第 10 行和第 20 行中推断出其检测错误。如何解决此问题?DEAD_STORE

注意:我的推断命令分两步运行,

xcodebuild clean build -workspace Project.xcworkspace -scheme Main -configuration Release COMPILER_INDEX_STORE_ENABLE=NO OTHER_CFLAGS="-DNS_FORMAT_ARGUMENT(A)= -D_Nullable_result=_Nullable" | tee xcodebuild.log | /usr/local/bin/xcpretty -r json-compilation-database -o compile_commands.json

/usr/local/bin/infer run --keep-going --skip-analysis-in-path Pods --compilation-database-escaped compile_commands.json
IOS 日志记录 静态分析 CocoalumberJack

评论

0赞 Sulthan 1/18/2022
你到底是怎么跑的?最有可能的是,当您的调试日志被删除时,它正在以发布模式检查您的应用。最简单的解决方案是将 和 变量包装到指令中,或者,您也可以将它们隐藏在宏中,例如 .eg 和 .inferstartTimeendTime#ifdef DEBUGSM_DEBUG_SAVE_START_TIME()SM_DEBUG_SAVE_START_TIME()
0赞 Sazzad Hissain Khan 1/18/2022
@Sulthan我添加了 Infer 的运行方式。此外,在发布配置中没有用于跳过日志的宏。您知道的 Lumberjack pod 端是否有任何默认设置?
0赞 Sulthan 1/18/2022
我的错。我假设您正在从发布模式中删除日志。我建议将 Xcode 切换为发布并检查预处理的输出。这应该会给你更多的信息。

答: 暂无答案