昨天我问自己一个问题。
是否可以以编程方式“强制”将特定函数的所有调用强制执行到程序中,并测试是否始终正确处理此调用的错误情况?
示例:
int main(void)
{
char *mallocforfun = NULL;
char **matrix = NULL;
if ((matrix = (char **)malloc(sizeof(char*) * 42)))
{
for (int i = 0; i < 42; i++)
{
matrix[i] = (char *)malloc(sizeof(char) * 42);
bzero(matrix[i], 42);
}
matrix[i] = NULL;
}
mallocforfun = (char*)malloc(sizeof(char) * 42);
...
// do some stuff and free everything
return (0);
}
所以在这个例子中,如果我们测试malloc函数,测试人员将放置三个断点:
int main(void)
{
char *mallocforfun = NULL;
char **matrix = NULL;
1st: if ((matrix = (char **)malloc(sizeof(char*) * 42)))
{
for (int i = 0; i < 42; i++)
{
2nd: matrix[i] = (char *)malloc(sizeof(char) * 42);
bzero(matrix[i], 42);
}
matrix[i] = NULL;
}
3rd: mallocforfun = (char*)malloc(sizeof(char) * 42);
...
// do some stuff and free everything
return (0);
}
运行程序,将malloc函数返回到错误值,查看是否崩溃,删除上次测试的断点,重新运行等等。
我想通过在一个环境中重复运行程序来验证我已经处理了所有错误返回,在这种环境中,malloc在每个调用站点失败一次,依次是后续的程序运行。 (感谢@Mic的明确表述)
我认为使用带有gdb脚本的非剥离二进制文件可以做到这样的事情。我自己搜索但找不到任何类似的东西。
所以我觉得我缺少一个“关键字”。你知道这种测试是否有一个特定的名称,或者是一个类似的工具吗?