gpt4 book ai didi

c++ - valgrind 能否报告丢失 block 的内存地址(用于调试递归函数调用)?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:46:37 26 4
gpt4 key购买 nike

This问题与我的最相似,但是它很旧,所以我想知道从那以后是否有任何变化。

我的 valgrind 输出是:

==29443== 109 (16 direct, 93 indirect) bytes in 2 blocks are definitely lost in loss record 270 of 309
==29443== at 0x4C2B0E0: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==29443== by 0x4F4E8DB: grl::Configuration::Configuration(grl::Configuration const&) (configuration.h:192)
==29443== by 0x4F49973: grl::YAMLConfigurator::load(YAML::Node const&, grl::Configuration*, std::string const&) (configurable.cpp:74)
==29443== by 0x4F499FC: grl::YAMLConfigurator::load(YAML::Node const&, grl::Configuration*, std::string const&) (configurable.cpp:75)
==29443== by 0x4F499FC: grl::YAMLConfigurator::load(YAML::Node const&, grl::Configuration*, std::string const&) (configurable.cpp:75)
==29443== by 0x4F499FC: grl::YAMLConfigurator::load(YAML::Node const&, grl::Configuration*, std::string const&) (configurable.cpp:75)
==29443== by 0x40C78E: grl::YAMLConfigurator::load(std::string, grl::Configuration*, std::string const&) (configurable.h:321)
==29443== by 0x40B897: main (deployer.cpp:180)

程序在开始时配置为递归调用,即从 yaml 文件中读取并将所有必需的参数作为一对 (name, allocated address) 存储在映射中。我可以打印这些对。因此,如果 valgrind 可以告诉我一个丢失值的地址,那么我就可以得到一个参数的名称并检查为什么它没有被释放。

如果无法实现该功能,我还能使用什么?

最佳答案

您可以使用 vgdb 在 valgrind+gdb 下运行您的程序。参见 http://www.valgrind.org/docs/manual/manual-core-adv.html#manual-core-adv.gdbserver

然后你可以使用各种valgrind memcheck monitor命令来做泄漏搜索并具有泄漏 block 的地址/大小。参见 http://www.valgrind.org/docs/manual/mc-manual.html#mc-manual.monitor-commands

关于c++ - valgrind 能否报告丢失 block 的内存地址(用于调试递归函数调用)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37053079/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com