1

是否有任何方法可以跟踪 C 程序的每个步骤分配、重新分配和释放了多少内存?我的意思是一步一步地在程序中进行所有分配,而不是错误、内存泄漏或类似的东西。

4

3 回答 3

1

是的,有办法做到这一点。我只知道一种方法。它称为Pin。理想情况下,您可以将 a 附加pin tool到二进制文件,然后它将可以访问所有内存访问和内容。它不需要对源代码进行任何修改。

这将需要您进行一些编程来编写 Pin 工具。pin 工具本质上是代码,您可以在其中指定要在程序运行中监视哪些参数以及如何监视。它非常灵活。但请注意,它有一点学习曲线。因此,只有当您有时间学习它时,这才是理想的。但如果你立竿见影,它可能不足以满足你的目的。

另请注意,Pin默认情况下会提供一些您可能感兴趣的工具,或者您可以修改这些工具以满足您的需要。您可能想要查看的一些工具(在我的脑海中)是: 1. Pinatrace 1. MallocTrace

我可能拼错了什么。但是有很多东西可能会给你你想要的东西!

另一个可行的解决方案是@happydave 提到的解决方案,我不推荐的解决方案是重新定义mallocandfree函数,这样当您调用 malloc/free 时,它​​会记录您感兴趣的参数。唯一的原因我推荐 Pin 而不是重新定义 malloc 是当您有时间并且将来您希望为您的跟踪器添加更多功能时。

于 2012-05-09T12:07:49.287 回答
1

在 MFC 环境中的窗口上 DEBUG_NEW 是一种方法。

http://msdn.microsoft.com/en-us/library/aa297313%28v=vs.60%29.aspx

另一个是使用标准文件和行号重新定义 alloc 系列函数。

   #define malloc(size) custom_malloc(size, __FILE__, __LINE__)

详细示例在 http://www.almostinfinite.com/memtrack.html

于 2012-05-09T11:59:13.540 回答
1

一种常见的方法是使用宏覆盖 malloc/free:

#define malloc(size) custom_malloc(size, __FILE__, __LINE__)

然后,您可以让 custom_malloc 执行正常的 malloc,并将分配信息转储到文件(或您想要对其执行的任何操作)。

要跟踪 free 中释放了多少内存,一种选择是在每个 malloc 调用上分配一个额外的字段来存储分配的大小,然后您可以检查何时释放。或者您可以将 malloc/free 指针转储到文件,然后编写脚本进行后处理并将它们排列起来。这在一定程度上取决于您想对这些信息做什么。

于 2012-05-09T11:46:44.780 回答