是否有任何方法可以跟踪 C 程序的每个步骤分配、重新分配和释放了多少内存?我的意思是一步一步地在程序中进行所有分配,而不是错误、内存泄漏或类似的东西。
3 回答
是的,有办法做到这一点。我只知道一种方法。它称为Pin。理想情况下,您可以将 a 附加pin tool
到二进制文件,然后它将可以访问所有内存访问和内容。它不需要对源代码进行任何修改。
这将需要您进行一些编程来编写 Pin 工具。pin 工具本质上是代码,您可以在其中指定要在程序运行中监视哪些参数以及如何监视。它非常灵活。但请注意,它有一点学习曲线。因此,只有当您有时间学习它时,这才是理想的。但如果你立竿见影,它可能不足以满足你的目的。
另请注意,Pin
默认情况下会提供一些您可能感兴趣的工具,或者您可以修改这些工具以满足您的需要。您可能想要查看的一些工具(在我的脑海中)是: 1. Pinatrace 1. MallocTrace
我可能拼错了什么。但是有很多东西可能会给你你想要的东西!
另一个可行的解决方案是@happydave 提到的解决方案,我不推荐的解决方案是重新定义malloc
andfree
函数,这样当您调用 malloc/free 时,它会记录您感兴趣的参数。唯一的原因我推荐 Pin 而不是重新定义 malloc 是当您有时间并且将来您希望为您的跟踪器添加更多功能时。
在 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__)
一种常见的方法是使用宏覆盖 malloc/free:
#define malloc(size) custom_malloc(size, __FILE__, __LINE__)
然后,您可以让 custom_malloc 执行正常的 malloc,并将分配信息转储到文件(或您想要对其执行的任何操作)。
要跟踪 free 中释放了多少内存,一种选择是在每个 malloc 调用上分配一个额外的字段来存储分配的大小,然后您可以检查何时释放。或者您可以将 malloc/free 指针转储到文件,然后编写脚本进行后处理并将它们排列起来。这在一定程度上取决于您想对这些信息做什么。