Использование valgrind для скомпилированного кода на C, расширенного через python 3.6 - PullRequest
1 голос
/ 10 октября 2019

Я написал расширение Python для моего C-проекта : некоторые данные берутся (в C), передаются в функцию Python, которая модифицирует их, затем сохраняются в структурах C и используются для более сложных операций. Когда я запускаю:

$ valgrind ./my_c_project

, я получаю хорошо известный каскад ложных срабатываний из-за использования Python C API. Я искал в Интернете, но ответы, кажется, либо устарели, либо ссылаются на другие пути: c модулей, расширяющих python .

Я могу думать, что независимо от того, используете ли вы pythonдля расширения C, или C для расширения python, решение должно быть таким же, так как основная «проблема» основана на некотором «неправильном понимании» malloc-PyMem. Сказал, что самый последний и многообещающий ресурс, который я нашел, находится здесь cpython / README.valgrind , в котором, в частности, утверждается:

ОБНОВЛЕНИЕ: Python 3.6 теперь поддерживает переменную среды PYTHONMALLOC = mallocкоторый может быть использован для принудительного использования malloc () распределителя библиотеки C.

Означает ли это, что вместо перестройки Python (, как предлагалось старымресурсы ), могу ли я просто правильно установить указанную выше переменную?

Другой решенный вопрос на этом сайте , кажется, дает утвердительный ответ (см. вклад dequis), но показан примерво время выполнения сценария Python (я цитирую):

PYTHONMALLOC = malloc python3 foobar.py

, что не в моем случае, так как у меня есть скомпилированный C-код. Я наивно пытался с:

$ PYTHONMALLOC=malloc valgrind ./my_c_project

, который не работал (как ожидалось ...). Я не перестраивал python, так как делюсь своей рабочей станцией с коллегами;Я думаю, что я мог бы попробовать локально, но у меня плохое предчувствие, так как я использую много внешних модулей, и я могу оказаться в хаосе (я сделаю последний шанс, это все опыт).

Ps: Я также пытался просто комментировать ответ dequis, требуя дополнительных объяснений, но моей репутации недостаточно (здесь абсолютно никаких претензий, только неявные извинения за мой длинный, но, надеюсь, подробный пост).

...