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