使用valgrind --xml-fd时为什么管道会出现乱码

时间:2016-03-12 10:38:03

标签: c++ encoding valgrind

这是我的代码:

int fd[2];
pipe(fd);
fd[0];
fd[1];
std::string cmd = "valgrind --leak-check=yes --track-origins=yes --xml=yes --xml-fd=";
cmd += std::to_string(fd[1]);
cmd += " /tmp/home/roroco/Dropbox/rbs/ro_cmds_global/c/valgrind/ex/ex2";
system(cmd.c_str());
close(fd[1]);
int n = 1024;
char buffer[1024];
std::string r;
while (read(fd[0], buffer, n) != 0) {
    r += buffer;
}
std::cout << r << std::endl;

可执行文件“ex2”代码是:

    int *is;
    is[2] = 2;
    return (0);

这里是output,我得到像<\360\034@

这样的混乱代码

更新

当我使用--xml-file时,它输出普通文本,如this

1 个答案:

答案 0 :(得分:0)

我找到了解决方案,因为int n = 1024很慢,以下代码可以正常工作:

int main(int argc, char **argv) {
    int fd[2];
    pipe(fd);
    fd[0];
    fd[1];
    std::string cmd = "valgrind --leak-check=yes --track-origins=yes --xml=yes --xml-fd=";
    cmd += std::to_string(fd[1]);
    cmd += " /tmp/home/roroco/Dropbox/rbs/ro_cmds_global/c/valgrind/ex/ex2";
    system(cmd.c_str());
    close(fd[1]);
    int n = 4096;
    char buffer[n];

    std::string r;
    while (read(fd[0], buffer, n) != 0) {
        r += buffer;
    }
    close(fd[0]);
    std::cout << r << std::endl;
    return (0);
}

我不知道为什么它是4096?为什么它不是2048,1024,如何确定这个值?如果有人知道,请更改此答案