Debugging 检测释放的内存使用情况(FPC->;heaptrc->;保留预释放)

Debugging 检测释放的内存使用情况(FPC->;heaptrc->;保留预释放),debugging,freepascal,Debugging,Freepascal,Free Pascal heaptrc keepreleased被描述为“如果您怀疑同一内存块被释放两次,那么它是有用的”,但是是否可以用它检测以前释放的内存的使用情况(释放对象的对象方法调用)?如果不可能-可以用其他工具检测到它吗?是的,应该这样做。其思路如下: 使用过的分配具有不同的.sig,然后是$aaaaaa或$DEADBEEF。在freemem上,如果useCRC为false,则根据sig$AAAAAAAA检查sig(参见中继线593周围) keepreleased防止块被重用,这会将

Free Pascal heaptrc keepreleased被描述为“如果您怀疑同一内存块被释放两次,那么它是有用的”,但是是否可以用它检测以前释放的内存的使用情况(释放对象的对象方法调用)?如果不可能-可以用其他工具检测到它吗?

是的,应该这样做。其思路如下:

使用过的分配具有不同的.sig,然后是$aaaaaa或$DEADBEEF。在freemem上,如果useCRC为false,则根据sig$AAAAAAAA检查sig(参见中继线593周围)

keepreleased防止块被重用,这会将签名更改为$AAAA之后的其他内容。它将打印如下内容:

标记内存为$12345678已释放

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

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

另一种(但速度非常慢)方法是使用valgrind(fpc选项-gv),但我只在*nix上运行过valgrind,正如所说的,它非常慢,因此不适用于处理量非常大的应用程序