如何读取 llvm-cov json 格式?
How to read llvm-cov json format?
我可以通过 llvm-cov 以 json 格式导出代码覆盖率数据,但内容对我来说似乎很神秘。 segments
部分中的每个数字是什么意思?
{
"filename":"file.m",
"segments":[
[
11,
22,
23,
1,
1
],
[
12,
11,
23,
1,
1
],
...
],
"expansions":[
],
"summary":{
...
}
}
经过 https://clang.llvm.org/docs/SourceBasedCodeCoverage.html, the JSON format is explained in the source code, which I found at https://github.com/llvm/llvm-project/tree/main/llvm/tools/llvm-cov。
source code 包含以下描述:
The json code coverage export follows the following format
Root: dict => Root Element containing metadata
-- Data: array => Homogeneous array of one or more export objects
-- Export: dict => Json representation of one CoverageMapping
-- Files: array => List of objects describing coverage for files
-- File: dict => Coverage for a single file
-- Branches: array => List of Branches in the file
-- Branch: dict => Describes a branch of the file with counters
-- Segments: array => List of Segments contained in the file
-- Segment: dict => Describes a segment of the file with a counter
-- Expansions: array => List of expansion records
-- Expansion: dict => Object that descibes a single expansion
-- CountedRegion: dict => The region to be expanded
-- TargetRegions: array => List of Regions in the expansion
-- CountedRegion: dict => Single Region in the expansion
-- Branches: array => List of Branches in the expansion
-- Branch: dict => Describes a branch in expansion and counters
-- Summary: dict => Object summarizing the coverage for this file
-- LineCoverage: dict => Object summarizing line coverage
-- FunctionCoverage: dict => Object summarizing function coverage
-- RegionCoverage: dict => Object summarizing region coverage
-- BranchCoverage: dict => Object summarizing branch coverage
-- Functions: array => List of objects describing coverage for functions
-- Function: dict => Coverage info for a single function
-- Filenames: array => List of filenames that the function relates to
-- Summary: dict => Object summarizing the coverage for the entire binary
-- LineCoverage: dict => Object summarizing line coverage
-- FunctionCoverage: dict => Object summarizing function coverage
-- InstantiationCoverage: dict => Object summarizing inst. coverage
-- RegionCoverage: dict => Object summarizing region coverage
-- BranchCoverage: dict => Object summarizing branch coverage
遗憾的是,对于细分是什么或细分的结构,这仍然不是很好的解释。
更详细地查看代码,我们发现以下两个片段:
json::Array renderSegment(const coverage::CoverageSegment &Segment) {
return json::Array({Segment.Line, Segment.Col, int64_t(Segment.Count),
Segment.HasCount, Segment.IsRegionEntry});
}
json::Array renderRegion(const coverage::CountedRegion &Region) {
return json::Array({Region.LineStart, Region.ColumnStart, Region.LineEnd,
Region.ColumnEnd, int64_t(Region.ExecutionCount),
Region.FileID, Region.ExpandedFileID,
int64_t(Region.Kind)});
}
这应该能让您更好地了解条目的含义。
文件 ID 似乎索引到扩展中给出的文件名。
除了之前的回答,我还发现这个页面非常有用:page。它有助于解释 segment
中的每个概念,例如 line
、column
.
我可以通过 llvm-cov 以 json 格式导出代码覆盖率数据,但内容对我来说似乎很神秘。 segments
部分中的每个数字是什么意思?
{
"filename":"file.m",
"segments":[
[
11,
22,
23,
1,
1
],
[
12,
11,
23,
1,
1
],
...
],
"expansions":[
],
"summary":{
...
}
}
经过 https://clang.llvm.org/docs/SourceBasedCodeCoverage.html, the JSON format is explained in the source code, which I found at https://github.com/llvm/llvm-project/tree/main/llvm/tools/llvm-cov。
source code 包含以下描述:
The json code coverage export follows the following format
Root: dict => Root Element containing metadata
-- Data: array => Homogeneous array of one or more export objects
-- Export: dict => Json representation of one CoverageMapping
-- Files: array => List of objects describing coverage for files
-- File: dict => Coverage for a single file
-- Branches: array => List of Branches in the file
-- Branch: dict => Describes a branch of the file with counters
-- Segments: array => List of Segments contained in the file
-- Segment: dict => Describes a segment of the file with a counter
-- Expansions: array => List of expansion records
-- Expansion: dict => Object that descibes a single expansion
-- CountedRegion: dict => The region to be expanded
-- TargetRegions: array => List of Regions in the expansion
-- CountedRegion: dict => Single Region in the expansion
-- Branches: array => List of Branches in the expansion
-- Branch: dict => Describes a branch in expansion and counters
-- Summary: dict => Object summarizing the coverage for this file
-- LineCoverage: dict => Object summarizing line coverage
-- FunctionCoverage: dict => Object summarizing function coverage
-- RegionCoverage: dict => Object summarizing region coverage
-- BranchCoverage: dict => Object summarizing branch coverage
-- Functions: array => List of objects describing coverage for functions
-- Function: dict => Coverage info for a single function
-- Filenames: array => List of filenames that the function relates to
-- Summary: dict => Object summarizing the coverage for the entire binary
-- LineCoverage: dict => Object summarizing line coverage
-- FunctionCoverage: dict => Object summarizing function coverage
-- InstantiationCoverage: dict => Object summarizing inst. coverage
-- RegionCoverage: dict => Object summarizing region coverage
-- BranchCoverage: dict => Object summarizing branch coverage
遗憾的是,对于细分是什么或细分的结构,这仍然不是很好的解释。
更详细地查看代码,我们发现以下两个片段:
json::Array renderSegment(const coverage::CoverageSegment &Segment) {
return json::Array({Segment.Line, Segment.Col, int64_t(Segment.Count),
Segment.HasCount, Segment.IsRegionEntry});
}
json::Array renderRegion(const coverage::CountedRegion &Region) {
return json::Array({Region.LineStart, Region.ColumnStart, Region.LineEnd,
Region.ColumnEnd, int64_t(Region.ExecutionCount),
Region.FileID, Region.ExpandedFileID,
int64_t(Region.Kind)});
}
这应该能让您更好地了解条目的含义。
文件 ID 似乎索引到扩展中给出的文件名。
除了之前的回答,我还发现这个页面非常有用:page。它有助于解释 segment
中的每个概念,例如 line
、column
.