我正在尝试memcheck我写的C python扩展,但是我在设置valgrind以使用python时遇到了麻烦.我真的很感激一些建议.仅供上下文使用,这是Ubuntu 13.10,python 2.7.5+和valgrind 3.8.1.
根据Readme.valgrind我的建议,我做了以下.
1)用.下载python源码
sudo apt-get build-dep python2.7
apt-get source python2.7
Run Code Online (Sandbox Code Playgroud)
2)应用代码补丁,即"在Objects/obmalloc.c中取消注释Py_USING_MEMORY_DEBUGGER".
3)应用抑制补丁,即"取消注释Misc/valgrind-python.supp中的行,以抑制PyObject_Free和PyObject_Realloc的警告"
4)编译python与
./configure --prefix=/home/dejan/workspace/python --without-pymalloc
make -j4 install
Run Code Online (Sandbox Code Playgroud)
请注意,我做了2和3,而README.valgrind说做2或3 ...更多不能伤害.
现在,让我们在一些示例python代码中对此进行测试 test.py
print "Test"
Run Code Online (Sandbox Code Playgroud)
让我们用这个脚本在python上运行valgrind
valgrind --tool=memcheck --leak-check=full --suppressions=python2.7-2.7.5/Misc/valgrind-python.supp bin/python test.py
Run Code Online (Sandbox Code Playgroud)
出乎意料的是,仍然有来自valgrind的大量报告,其中第一个报告(以及更多关注报告)
==27944== HEAP SUMMARY:
==27944== in use at exit: 857,932 bytes in 5,144 blocks
==27944== total heap usage: 22,766 allocs, 17,622 frees, 4,276,934 bytes allocated
==27944==
==27944== 38 bytes in 1 blocks are possibly lost in loss record 24 of 1,343
==27944== …Run Code Online (Sandbox Code Playgroud) ubuntu 11.04有本机python2.7我从源码到/usr/local/python2.5/bin构建python2.5,并尝试为我的自定义python2.5安装安装lxml.我也使用virtualenv.我用python2.5切换到我的环境.在导入lxml时出现错误.
from lxml import etree
ImportError: /home/se7en/.virtualenvs/e-py25/lib/python2.5/site-packages/lxml-2.2.4-py2.5-linux-i686.egg/lxml/etree.so: undefined symbol: PyUnicodeUCS2_DecodeLatin1
Run Code Online (Sandbox Code Playgroud)
使用python2.7 env,一切正常,但在python2.5导入失败.请帮忙修复python2.5?
ldd /home/se7en/.virtualenvs/e-py25/lib/python2.5/site-packages/lxml-2.2.4-py2.5-linux-i686.egg/lxml/etree.so
结果:
(e-py25)se7en@se7en-R510-P510:~/downloads/lxml-2.2.4$ ldd /home/se7en/.virtualenvs/e-py25/lib/python2.5/site-packages/lxml-2.2.4-py2.5-linux-i686.egg/lxml/etree.so
linux-gate.so.1 => (0x00968000)
libxslt.so.1 => /usr/lib/libxslt.so.1 (0x005aa000)
libexslt.so.0 => /usr/lib/libexslt.so.0 (0x00110000)
libxml2.so.2 => /usr/lib/libxml2.so.2 (0x00db3000)
libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0x00a22000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0x00564000)
libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0x00123000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x0013c000)
libgcrypt.so.11 => /lib/i386-linux-gnu/libgcrypt.so.11 (0x0029d000)
libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0x00d6e000)
/lib/ld-linux.so.2 (0x004fc000)
libgpg-error.so.0 => /lib/i386-linux-gnu/libgpg-error.so.0 (0x00879000)
(e-py25)se7en@se7en-R510-P510:~/downloads/lxml-2.2.4$
Run Code Online (Sandbox Code Playgroud)