在Boost.Python中使用gperftools

时间:2015-04-16 16:12:14

标签: c++ boost-python gperftools

我正在尝试使用Boost.Python在C ++中编写的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来追踪这样的泄漏?

这是否可能,或者我基本上只是卡住了?

0 个答案:

没有答案