无法使用 valgrind 调试 python C 扩展

问题描述 投票:0回答:1

我正在尝试调试使用 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== 

我做错了什么?

python c malloc valgrind cffi
1个回答
0
投票

您的进程很可能正在执行 fork/exec。

如果您使用默认的 Valgrind 选项执行此操作,则执行进程将不会在 Valgrind 下运行。

使用

--trace-children=yes
选项。

© www.soinside.com 2019 - 2024. All rights reserved.