我如何在GCOV上使用GDB?

我在这里看了这篇文章:http://www.linux-mag.com/id/1409/

#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);

}

文章很简单。 它建议使用GDB通过“跳转”到通常无法访问的行来获得覆盖范围。 但是,它不像描述的那样工作。 我发现,如果我在GDB中使用“跳转”命令,gcov不会将该行识别为执行。 我必须在行之前实际上中断,并且使用数组变量来强制代码识别malloc失败。 一般来说,这可能会也可能不那么容易。 跳转似乎是一种更简单的方式来获得代码,但它不起作用。

所以这里真的有两个问题。

gcov为什么不识别gdb跳转?

为什么gcov / gdb的一个版本识别跳转而另一个不跳转? 我怎么知道这两个程序是否兼容?

谢谢。

链接地址: http://www.djcxy.com/p/51009.html

上一篇: How can I use GDB with GCOV?

下一篇: What is my version of LLVM & clang (OSX)?