我想编写工具,收集有关可执行文件的不同运行时信息,包括堆信息。 Valgrind 是获取此类信息的完美工具。我想要获取的关键信息是
total heap usage: X allocs, X frees, X bytes allocated
。但是,除了使用 popen
执行 "valgrind --trace-children ./executable"
并解析 stdout 的输出之外,我还没有找到其他使用它的方法。理想情况下,我想要这样的东西:
#include "valgrind.h"
int main() {
valgrind::valgrind_results res = valgrind::valgrind_memcheck(
"path/to/executable",
std::vector<std::string>{"--trace-children", "--other-options"}
);
std::cout << res.allocs << res.frees << res.bytes_allocated << std::endl;
return 0;
}
这样的事情存在吗?
考虑
--xml
选项(这将使解析更容易,尽管对于 C++ 来说可能不太有利)和 --xml-socket
或 --log-socket
选项,这可以更方便地提供数据。