在这里给您一些背景信息,我用valgrind测试的项目是distcc的略微修改版本。失败的功能尚未更改。代码中有问题的确切位置是compress.c中的函数dcc_compress_file_lzo1x。它是这样的:
int dcc_compress_file_lzo1x(int in_fd,
size_t in_len,
char **out_buf,
size_t *out_len)
{
char *in_buf = NULL;
int ret;
if ((in_buf = malloc(in_len)) == NULL) {
rs_log_error("allocation of %ld byte buffer failed",
(long) in_len);
ret = EXIT_OUT_OF_MEMORY;
goto out;
}
这里的问题是if语句中的malloc。如果我正常运行该程序,它将随机失败(我将所有内容包装在调试打印中),这意味着在执行malloc时程序崩溃,而不会产生错误打印。另一方面,如果我使用valgrind启动程序,那么一切都会通过,并且valgrind不会产生任何有用的信息。
我不是在寻找简单的答案。我只是想知道如何调试它,因为我没有想法。