我正在尝试调试使用 CFFI 制作的 C 扩展。我正在使用 Python 3.11 和 Valgrind 3.18.1。
据我从文档中可以看出,唯一需要的设置是设置
PYTHONMALLOC=malloc
环境变量,但由于某种原因,valgrind 只是拒绝报告任何设置或未设置的错误。
例如:
# test.py
from myproj._myproj import lib
lib.func_that_calls_malloc()
$ PYTHONMALLOC=malloc valgrind --show-leak-kinds=definite --leak-check=full python test.py
==2880771== Memcheck, a memory error detector
==2880771== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==2880771== Using Valgrind-3.18.1 and LibVEX; rerun with -h for copyright info
==2880771== Command: /home/user/.pyenv/shims/python test.py
==2880771==
$ valgrind --show-leak-kinds=definite --leak-check=full python test.py
==2881962== Memcheck, a memory error detector
==2881962== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==2881962== Using Valgrind-3.18.1 and LibVEX; rerun with -h for copyright info
==2881962== Command: /home/user/.pyenv/shims/python test.py
==2881962==
我做错了什么?
您的进程很可能正在执行 fork/exec。
如果您使用默认的 Valgrind 选项执行此操作,则执行进程将不会在 Valgrind 下运行。
使用
--trace-children=yes
选项。