【问题标题】:valgrind does not show memory leak in log [duplicate]valgrind 未在日志中显示内存泄漏 [重复]
【发布时间】:2021-12-30 19:05:35
【问题描述】:

我有一个服务,并在我的本地运行,当我停止服务时,ASAN 给我内存泄漏消息。所以我尝试使用Valgrind查找泄露的地方,但是没有出现这样的错误。

我运行它

valgrind --leak-check=full --show-leak-kinds=all --verbose --log-file=out.txt /my/path/to/myshell -m myservice.py

"/my/path/to/myshell -m myservice.py" 是在本地启动我的服务的方式。

myshell 使用 os.execve 调用 Python 客户解释器

在我停止服务后,我看到 ASAN 给了我很多关于内存泄漏的消息,但是在 out.txt 中,我看到了 pid,这与我运行 ps -ef 的进程相同,但是有根本没有内存泄漏信息。哪里错了?

【问题讨论】:

  • 您是否在没有 ASAN 的情况下重新编译?你是用调试编译的吗?

标签: c++ valgrind


【解决方案1】:

如果你打算在 valgrind 下运行程序,那么不要用 ASAN 编译。它们不能一起工作。

不使用-fsanitize=address 重新编译并重试。

您还需要将--trace-children=yes 标志添加到valgrind,以便它检查execve 执行的子进程。

【讨论】:

  • 我在未启用 ASAN 的情况下编译,但仍然没有输出。
  • @code3 您可能还想将--trace-children 标志添加到valgrind,因为您的实际程序似乎只运行了几个子进程。您可能希望将valgrind 调用直接放入os.execve 以避免来自其他进程的噪音。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-15
  • 2014-10-28
  • 2019-02-10
  • 1970-01-01
  • 2019-07-17
  • 1970-01-01
相关资源
最近更新 更多