检测释放的内存使用情况(FPC - > heaptrc - > keepreleased)

时间:2013-04-22 07:26:39

标签: debugging freepascal

免费的Pascal heaptrc keepreleased被描述为“如果您怀疑相同的内存块被释放两次就很有用”但是有可能检测到以前释放的内存(释放对象的对象方法调用)的使用吗?如果不可能 - 可以用其他工具检测到吗?

1 个答案:

答案 0 :(得分:1)

是的,应该这样做。这个想法如下:

使用的分配具有不同的.sig,然后是$ AAAAAAAA或$ DEADBEEF。在freemem上,如果useCRC为false,则检查sig(参见主干中的第593行)和sig $ AAAAAAA。

keepreleased可以防止块被重用,这会将签名更改为$ AAAAAAAA。它将打印如下内容:

标记记忆在12345678美元发布

到文件描述符ptext。可以使用各种其他变量设置和定向错误标准文件。它看起来相当复杂,但这可能是为了处理无控制台的GUI应用程序

其他一些变量(如haltonerror)控制应用程序是否因此类损坏而停止

另一种(但非常慢)的方法是使用valgrind(fpc选项-gv),但我只在* nix上运行valgrind,并且据说它非常慢,所以不适用于非常繁重的处理应用程序。