0

在这里给你一些背景,我用 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 不会产生任何有用的东西。

我不是在寻找简单的答案。我只想知道如何调试它,因为我没有想法。

4

0 回答 0