- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
执行摘要:我想使用 GDB 来提取存储在我的嵌入式目标内存中的覆盖执行计数,并使用它们来创建 .gcda
文件(用于输入 gcov/lcov)。
设置 :
tar extended-remote localhost:...
附加到正在运行的 QEMU GDB 服务器,并完全控制我的二进制文件的执行)。 -fprofile-arcs -ftest-coverage
.然后 GCC 发出 64 位计数器来跟踪特定代码块的执行计数。
__gcov_exit
被调用 - 并将所有这些执行计数收集到
.gcda
文件(然后 gcov 用来报告覆盖率详细信息)。
__gcov_...
的空 stub 。职能。
MYPLATFORM-readelf
在我的二进制文件中列出与覆盖率相关的符号, 和
grep
-出相关的(例如
__gcov0.Task1_EntryPoint
,
__gcov0.worker
等):
$ MYPLATFORM-readelf -s binary | grep __gcov
...
46: 40021498 48 OBJECT LOCAL DEFAULT 4 __gcov0.Task1_EntryPoint
...
.gcda
文件。如果存在这样的工具/脚本,我将有一种可移植(与平台无关)的方式来覆盖任何支持 QEMU 的平台。
最佳答案
原来有一种(很多)更好的方法来做我想做的事。
Linux 内核 includes portable GCOV related functionality ,通过提供此端点抽象出特定于 GCC 版本的详细信息:
size_t convert_to_gcda(char *buffer, struct gcov_info *info)
vmalloc
,
kfree
等 - 使代码可移植(因此,可以在我的嵌入式平台上编译,这与 Linux 无关)。
__gcov_init
...
typedef struct tagGcovInfo {
struct gcov_info *info;
struct tagGcovInfo *next;
} GcovInfo;
GcovInfo *headGcov = NULL;
void __gcov_init(struct gcov_info *info)
{
printf(
"__gcov_init called for %s!\n",
gcov_info_filename(info));
fflush(stdout);
GcovInfo *newHead = malloc(sizeof(GcovInfo));
if (!newHead) {
puts("Out of memory!");
exit(1);
}
newHead->info = info;
newHead->next = headGcov;
headGcov = newHead;
}
__gcov_exit
:
void __gcov_exit()
{
GcovInfo *tmp = headGcov;
while(tmp) {
char *buffer;
int bytesNeeded = convert_to_gcda(NULL, tmp->info);
buffer = malloc(bytesNeeded);
if (!buffer) {
puts("Out of memory!");
exit(1);
}
convert_to_gcda(buffer, tmp->info);
printf("Emitting %6d bytes for %s\n", bytesNeeded, gcov_info_filename(tmp->info));
free(buffer);
tmp = tmp->next;
}
}
$ cat coverage.gdb
tar extended-remote :9976
file bin.debug/fputest
b base.c:88 <================= This breaks on the "Emitting" printf in __gcov_exit
commands 1
silent
set $filename = tmp->info->filename
set $dataBegin = buffer
set $dataEnd = buffer + bytesNeeded
eval "dump binary memory %s 0x%lx 0x%lx", $filename, $dataBegin, $dataEnd
c
end
c
quit
$ # In terminal 1:
qemu-system-MYPLATFORM ... -kernel bin.debug/fputest -gdb tcp::9976 -S
$ # In terminal 2:
MYPLATFORM-gdb -x coverage.gdb
gcov
上的覆盖结果和
lcov
.
关于embedded - 通过 QEMU/GDB 生成 .gcda 覆盖文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36839354/
我有两个使用通用 C++ 类的主要函数。 文件 1: main.cpp #include #include "HelloAnother.h" int main() {
我正在尝试使用 iPhone 模拟器分析我的代码。我已启用生成测试覆盖率文件和仪器程序流程,并将-lgcov添加到链接器标志中。根据我读到的所有内容,这应该是我在设置方面需要做的全部事情。 更新:生成
我使用 gcov 进行代码覆盖率分析,并使用 lcov 生成覆盖率的图形输出。这对于至少已执行目标文件的某些部分的代码文件非常有效。我希望能够跟踪根本没有执行的文件。我怀疑这与没有为这些文件生成 .g
我目前面临为静态库的覆盖数据生成 .gcda 文件的问题。我可以获得大多数文件的覆盖率数据,但不是全部。 我将缺少覆盖率数据的目标文件称为 X。 一些注意事项: 我已经使用适当的标志编译了库和测试可执
我想使用 gcov 和 lcov 生成覆盖率报告。 到现在为止我做了什么 :- 1. I compiled my code using --fprofile-arcs and -fprofile-co
我有几个针对应用程序的单元测试,每个测试都能够生成 .gcda 文件。我希望能够生成统一的 .gcda 文件,这些文件代表整个测试套件的覆盖范围。似乎没有一种简单的方法可以做到这一点,但我可能是错的,
注意:这可以被视为 Gcov is not generating *.gcda file 的副本,但是: 这个问题没有答案 我认为 OP 的系统与我不同,所以我认为我只去编辑他的问题是不行的。而且,问
我正在尝试使用主目录中的 lcov 生成代码覆盖率报告。源代码使用 -coverage 选项编译,以在编译时生成覆盖率信息(创建 gcno 文件)。然后我将可执行文件和 gcno 文件复制到主目录。我
我正在尝试使用主目录中的 lcov 生成代码覆盖率报告。源代码使用 -coverage 选项编译,以在编译时生成覆盖率信息(创建 gcno 文件)。然后我将可执行文件和 gcno 文件复制到主目录。我
我尝试使用 -fprofile-arcs 和 -ftest-coverage 运行 gcov,但没有任何链接。 它给出了这个错误:- hidden symbol `__gcov_init' in /
我正在尝试生成 C 文件的覆盖范围(Yocto 项目)。 因此,我在大多数可用模块的 Makefile.am 中添加了 gcov 标志“-g -O0 --coverage”。 它在编译每个带有覆盖标志
我已经尝试了很多我创建的解决方案,但都没有奏效。我正在为一个项目编写一个新代码,但是这段代码被很多硕士和博士学位所触动,他们不在乎使其可读性。因此,确实有很多东西没有用,甚至没有用过。 然后我开始关注
是否可以通过运行链接到使用 --coverage 选项构建的共享库的可执行文件来生成 gcov 数据文件(.gcda 文件)? 基本上,我的主库由多个 c++ 文件编译到一个共享库中,然后是一个名为“
我有相同的源文件(C 和 Obj-C)被编译成两个目标:单元测试可执行文件和实际产品(然后进行集成测试)。这两个目标构建到不同的位置,因此目标文件、.gcno 和 .gcda 文件是分开的。并非所有源
我想知道当 iOS 应用程序在 Xcode 机器人上运行单元测试时如何生成 gcda 文件。 我用了this blog配置 Xcode 以生成测试覆盖率文件并使用利用 lcov 的脚本生成报告。我可以
最近我一直在尝试使用 gcc/gcov 对 C++ 项目进行代码覆盖率测试。该项目由主模块和几个.so库组成,都应该进行测量。 我已经用 gcc 编译了带有 --coverage 参数的所有模块,并将
我有一个用 Cmake 编译的项目。我使用 Gcov 来了解在目标上执行期间的代码覆盖率。我使用 GCOV_PREFIX 来更改 .gcda 文件的目录。但是我在这个目录中只有 45 个 .gcda
我手头有一个带有 cmocka 测试的 C 项目,它是使用 CMake 构建的。现在我尝试使用 gcov 来确定测试覆盖率并使用此 CMake 模块:https://github.com/bilke/
问题: 我正在使用以下标志生成我的 Qt 应用程序(.pro 文件)的代码覆盖率: QMAKE_CXXFLAGS += --coverage QMAKE_LFLAGS += --coverage 代码
执行摘要:我想使用 GDB 来提取存储在我的嵌入式目标内存中的覆盖执行计数,并使用它们来创建 .gcda文件(用于输入 gcov/lcov)。 设置 : 我可以成功地交叉编译我的二进制文件,以我的特定
我是一名优秀的程序员,十分优秀!