Использование gperftools с Boost.Python

Я пытаюсь отследить утечку памяти в расширении Python, написанном на C ++ с использованием Boost.Python. Я пытался использовать gperftools. Тем не менее, похоже, что он не очень хорошо работает с Python.

Вот простой пример, я выставляю std::vector<int>:

#include <boost/python.hpp>
#include <boost/python/suite/indexing/vector_indexing_suite.hpp>

namespace py = boost::python;

std::vector<int> getIs(int n) {
return std::vector<int>(n, 42);
}

BOOST_PYTHON_MODULE(Foo)
{
py::class_<std::vector<int>>("IList")
.def(py::vector_indexing_suite<std::vector<int>>() )
;

py::def("getIs", getIs);
}

Если я скомпилирую этот модуль с -ltcmalloc в соответствии с рекомендациями, происходит сбой даже простой итерации:

>>> import Foo
>>> print [i for i in Foo.getIs(1)]
Segmentation fault (core dumped)

Стек вызовов указывает здесь:

if (self.m_start == self.m_finish)
stop_iteration_error(); // <==
return *self.m_start++;

Я подозреваю, что это потому, что gperftools не обрабатывает тот факт, что в Python исключения генерируются все время, и это ожидается. У кого-нибудь есть опыт использования gperftools для отслеживания таких утечек?

Это вообще возможно, или я просто застрял?

2

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]