如何将GDB与GCOV一起使用?

如何将GDB与GCOV一起使用?,gdb,gcov,Gdb,Gcov,我在这里看了这篇文章: #包括 #包括 int main(argc、argv) int-argc; 字符**argv; { int x,y; 内部阵列化; 整数**数组; 如果(argc!=2){ printf(“用法:%s输入arraysize值\n”,argv[0]); 出口(-1); }否则{ arraysize=atoi(argv[1]); if(arraysize)你能显示一些示例代码吗?据我所知,gcc的测试覆盖率是通过在基本块的开头递增一个计数器来实现的。如果你使用调试器跳转到基本

我在这里看了这篇文章:

#包括
#包括
int main(argc、argv)
int-argc;
字符**argv;
{
int x,y;
内部阵列化;
整数**数组;
如果(argc!=2){
printf(“用法:%s输入arraysize值\n”,argv[0]);
出口(-1);
}否则{
arraysize=atoi(argv[1]);

if(arraysize)你能显示一些示例代码吗?据我所知,gcc的测试覆盖率是通过在基本块的开头递增一个计数器来实现的。如果你使用调试器跳转到基本块的中间,递增指令可能会被跳过。我从web链接添加了代码。如果我尝试“jump 34”从gdb中,代码退出并打印出我所期望的内容,但GCOV没有报告这一行。可能是跳过了一个基本块的开头,但是原始网页中的人是如何让他们的示例工作的?不知何故,gdb、gcc和/或GCOV并不是每次都做相同的事情,但我不知道如何确定我可以复制它,我会研究它。至于为什么不同版本的代码覆盖率软件表现不同:你链接的文章已经超过11年了。从那时起,Gcc和gcov可能已经改变了它们的实现。
#include <stdlib.h>

#include <stdio.h>


int main(argc, argv)

int argc;

char **argv;

{

  int x, y;

  int arraysize;

  int **array;

  if (argc != 2) {

    printf(“Usage: %s Enter arraysize value \n”,argv[0]);

    exit(-1);

  } else {

    arraysize = atoi (argv[1]);

    if (arraysize <= 0) {

      printf(“Array size must be larger than 0 \n”);

      exit(-1);

    }

  }


  array = (int **) malloc (arraysize*sizeof (int *));


  printf(“Creating an %d by %d array \n”, arraysize, arraysize);


  if (array == NULL) {

    printf(“Malloc failed for array size %d \n”, arraysize);

    exit(-1);

  }

  for (x=0; x < arraysize; x++) {

    array[x] = (int *) malloc (arraysize*sizeof (int));

    if (array[x] == NULL) {

34:      printf(“Failed malloc for array size %d \n”, arraysize);

      exit(-1);

    }

  }

  exit(0);

}