Valgrind:抑制一次性内存泄漏
Valgrind: suppress one-time memory leaks
Valgrind 报告我的程序中有多个内存泄漏,其中一些是反复发生的泄漏(即它们发生在多个块中),但大多数是一次性的,即在程序初始化时发生的分配,而我没有程序退出前不用管。我知道我可以编写抑制文件来抑制特定库、函数等的泄漏,但我还没有找到一种方法来抑制泄漏次数有限。有办法吗?
目前,我使用我编写的一个小程序来过滤 Valgrind 的报告文件以防止一次性泄漏(因此当报告文件中的一段以 X bytes leaked in 1 blocks
开头时,该段将从报告文件中删除) ,但显然我更愿意配置 Valgrind 来抑制这些泄漏,尤其是因为我的过滤器没有做任何事情来保持泄漏摘要的准确性。
我问是因为泄漏的初始化代码是由编译器生成的,该编译器将我编写程序所用的语言编译为 C,而我对修改没有兴趣。
Valgrind 不会报告在程序退出时仍可访问的已分配内存的错误,因此您有真正的泄漏,即使泄漏的内存量是固定的并且(目前)无关紧要。考虑实际释放您的指针,或者确保它们不会超出范围或被覆盖。在某些情况下,您可以使用数组而不是动态分配的内存。
但是,如果您坚持使用压制来压制对真正泄漏的报告,那么请让 Valgrind 为您完成这项工作。添加选项 --gen-suppressions=yes
(如果您想交互式 select 生成哪些抑制)或 --gen-suppressions=all
(为所有错误生成抑制)到您的 valgrind
命令行。您需要将 Valgrind 输出的抑制描述符复制到抑制文件中。
Valgrind 报告我的程序中有多个内存泄漏,其中一些是反复发生的泄漏(即它们发生在多个块中),但大多数是一次性的,即在程序初始化时发生的分配,而我没有程序退出前不用管。我知道我可以编写抑制文件来抑制特定库、函数等的泄漏,但我还没有找到一种方法来抑制泄漏次数有限。有办法吗?
目前,我使用我编写的一个小程序来过滤 Valgrind 的报告文件以防止一次性泄漏(因此当报告文件中的一段以 X bytes leaked in 1 blocks
开头时,该段将从报告文件中删除) ,但显然我更愿意配置 Valgrind 来抑制这些泄漏,尤其是因为我的过滤器没有做任何事情来保持泄漏摘要的准确性。
我问是因为泄漏的初始化代码是由编译器生成的,该编译器将我编写程序所用的语言编译为 C,而我对修改没有兴趣。
Valgrind 不会报告在程序退出时仍可访问的已分配内存的错误,因此您有真正的泄漏,即使泄漏的内存量是固定的并且(目前)无关紧要。考虑实际释放您的指针,或者确保它们不会超出范围或被覆盖。在某些情况下,您可以使用数组而不是动态分配的内存。
但是,如果您坚持使用压制来压制对真正泄漏的报告,那么请让 Valgrind 为您完成这项工作。添加选项 --gen-suppressions=yes
(如果您想交互式 select 生成哪些抑制)或 --gen-suppressions=all
(为所有错误生成抑制)到您的 valgrind
命令行。您需要将 Valgrind 输出的抑制描述符复制到抑制文件中。