任何人都可以告诉我gcov消息“合并不匹配摘要”的含义是什么?我在这里的GCC源中找到的消息:gcov警告:合并不匹配摘要
http://www.opensource.apple.com/source/gcc/gcc-5646/gcc/libgcov.c
这似乎是一个全面的检查,在.gcda
文件的标签相匹配,但我不知道。任何人都知道如何解决这个问题?
任何人都可以告诉我gcov消息“合并不匹配摘要”的含义是什么?我在这里的GCC源中找到的消息:gcov警告:合并不匹配摘要
http://www.opensource.apple.com/source/gcc/gcc-5646/gcc/libgcov.c
这似乎是一个全面的检查,在.gcda
文件的标签相匹配,但我不知道。任何人都知道如何解决这个问题?
当您链接到可执行文件的某个对象发生显着变化时,会发生这种情况。例如,它获得或丢失了一些profilable代码行。
产生错误的最小情况是使用2个源文件。这里有两个例子源文件名为main.c中......
/* main.c */
int do_stuff(int value);
int main(int argc, const char *argv[])
{
do_stuff(argc);
return 0;
}
和stuff.c
/* stuff.c */
#include <stdio.h>
#if 0
int more_stuff()
{
int i;
i = 0;
return i;
}
#endif
int do_stuff(int value)
{
if (value > 1) {
printf("Value > 1\n");
} else {
printf("Value <= 1\n");
}
return 0;
}
他们做什么并不重要。要建立他们,这里是一个简单的Makefile:
CFLAGS := -fprofile-arcs -ftest-coverage
LDFLAGS := -fprofile-arcs -ftest-coverage
testexe: main.o stuff.o
$(CC) $(LDFLAGS) -o [email protected] $^
建立makefile向上,以便在编译main.c -> main.o
,stuff.c -> stuff.o
最后stuff.o + main.o -> testexe
。如果我们将这些C文件编译并链接到-fprofile-arcs -ftest-coverage
选项,那么可执行文件会进行分析。运行可执行文件,你将得到2个输出文件,main.gcda
和stuff.gcda
。到现在为止还挺好。
现在将行#if 0
更改为#if 1
。 Makefile应该只会导致stuff.c重新编译,并且可执行文件会重新链接。下次您运行测试可执行文件时,您将收到文件“合并不匹配”消息。 stuff.gcda文件不受影响,因为它的对象文件已经用所有新的摘要信息重新创建。如果您重新编译main.c
并重新链接可执行文件,则错误消息将消失。
那么可以做些什么?我很想知道!目前我运行find . -name '*.gcda' | xargs rm
每当我需要重新检查覆盖面,这是不是很理想。另一种解决方案是在使用分析“以防万一”时重新编译所有内容,但似乎过度杀伤。
非常好,谢谢你的信息!很高兴终于明白这里发生了什么。优秀的解释。我有一个类似的解决方法 - 在运行之前删除所有生成的文件。我现在明白了这是为什么起作用,但我认为错误信息可能会有所改善。 – mikelong 2010-04-24 22:26:16