在这里给你一些背景,我用 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 不会产生任何有用的东西。
我不是在寻找简单的答案。我只想知道如何调试它,因为我没有想法。