1

我是 ac 程序员,我是 C++ 新手。在 c 中,我们有 mtrace() 函数来跟踪有关分配和释放内存的信息。是否有任何类似的功能可以做到这一点,但在 c++ 中。

4

3 回答 3

4

mtrace不是“在 C 中”;它是 GLIBC 提供的实用程序,具有 C 绑定。

如果您仍在将 GLIBC 与您的 C++ 应用程序一起使用,您可能仍然可以使用mtrace(除非您有一些不使用malloc/的自定义分配器free,但这对于任何泄漏检测器来说都是一个问题)。

然而,Valgrind更适合这项任务。它功能更加丰富和进化。例如,mtrace仅适用于单线程程序mtrace它可以为您提供的信息也有限,而 Valgrind(与其他一些工具结合使用)可以成为真正的自然力量

于 2019-12-29T15:06:49.947 回答
1

mtrace() 在 C++ 中也可以工作,但在 C++ 中,它几乎总是返回代码中调用newdelete的地址,例如,没有来自堆栈的更多信息,这使得轻松识别问题的能力有限。

于 2019-12-29T15:10:40.337 回答
0

C++ 内存管理只是 C 之上的一堆语言特性。
我不是 valgrind 的粉丝,它太慢了。
我会推荐ASAN。它内置在 GCC/Clang 中,有很多选项可供使用。

于 2019-12-29T17:11:36.503 回答