我试图了解 gcov 工具的输出。不带选项运行它是有道理的,但我想尝试了解分支覆盖选项。不幸的是,很难理解这些分支做了什么以及为什么不使用它们。下面是一个方法的输出(使用最新的 LLVM/Clang 构建编译)。
function -[TestCoverageAppDelegate loopThroughArray:] called 5 returned 100% blocks executed 88%
5: 30:- (NSInteger)loopThroughArray:(NSArray *)array {
5: 31: NSInteger i = 0;
22: 32: for (NSString *string in array) {
branch 0 taken 0
branch 1 taken 7
-: 33:
22: 34: }
branch 0 taken 4
branch 1 taken 3
branch 2 taken 0
branch 3 taken 3
5: 35: return i;
-: 36:}
我已经通过这个运行了 5 次测试,传入 nil、一个空数组、一个包含 1 个对象的数组、一个包含 2 个对象的数组和一个包含 4 个对象的数组。我可以猜到,在第一种情况下,分支 1 的意思是“进入循环”,但我不知道分支 0 是什么。在第二种情况下,分支 0 似乎再次循环,分支 1 似乎结束循环,分支 3 继续/退出循环,但我不知道分支 2 是什么或为什么/何时执行。
如果有人知道如何破译分支信息,或者知道任何有关这一切的详细文档,我将不胜感激。