我在这里查看了这篇文章: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通过&#34;跳转到通常无法到达的线路来覆盖。但是,它并没有像所描述的那样起作用。我发现如果我使用&#34; jump&#34;在GDB中,gcov不会将该行识别为已执行。我之前必须先断开这一行,然后使用数组变量强制代码识别malloc失败。一般来说,这可能也可能不那么容易。跳转似乎是一种更容易获取代码的方式,但它无法正常工作。
所以这里确实有两个问题。
为什么gcov没有识别gdb跳转?
为什么一个版本的gcov / gdb识别跳转而另一个版本不识别?如何判断2个程序是否兼容?
感谢。