2010-10-20 23 views

cevap

1

Evet yapabilirsiniz: yapmanız ile valgrind çalıştırmak için bir hedef var - bu piton tercüman kendisidir:

valgrind python foo.py 

Ancak yukarıdaki sonuçlar çok tatmin edici olmayabilir - Python inşa edilmiştir opt modunda ve sizi yanlış pozitiflere boğacak özel bir malloc ile.

Öncelikle Python'un bir hata ayıklama sürümünü oluşturarak daha iyi sonuçlar elde edersiniz. here'u başlatın.

+0

Bu bağlantıyı günceller misiniz lütfen? –

39

Evet, valgrind'u Python ile kullanabilirsiniz. Sadece Python geliştiricileri tarafından sağlanan valgrind bastırma dosyasını kullanmanız gerekir, bu yüzden Python'un özel bellek ayırma/yeniden ayırma işlevleri nedeniyle bir sürü yanlış pozitif almazsınız.

valgrind bastırma dosya

burada bulunabilir: http://svn.python.org/projects/python/trunk/Misc/valgrind-python.supp

ÖNEMLİ: Sen * bastırma dosyasında PyObject_Free ve PyObject_Realloc için satırları uncomment gerekir.

önerilen kullanım sözdizimi:

$ valgrind --tool=memcheck --suppressions=valgrind-python.supp \ 
              python -E -tt ./my_python_script.py 

Ayrıca bkz valgrind ile Python kullanarak farklı yolları anlatılmaktadır Python SVN repo bu README dosyası: http://svn.python.org/projects/python/trunk/Misc/README.valgrind

* - Alternatif olarak, Python'u PyMalloc'u devre dışı bırakabilir, bu da PyMalloc'u bastığınızda ortaya çıkmayacak daha fazla bellek sızıntısı yakalamanıza olanak tanır.

+1

Python 2.7 oldukça yaramaz görünüyor. Boş bir betik (valgrind --leak-check = yes --suppressions = valgrind-python.supp python -tt -E "") , "315 içerikten 315 hata veriyor (bastırılmış: 2'den 2)", Fedora 16. – Ling

+1

@Ling 'PyObject_Free' ve' PyObject_Realloc' için uyarıları bastıran 'Misc/valgrind-python.supp'daki satırları rahatsız etmediğinizi hatırladınız mı? –

+0

Yaptım. Bu yüzden şaşırdım. – Ling

8

Python 2.7 ve 3.2'de Python yorumlayıcısının valgrind altında çalıştığını ve PyMalloc'u devre dışı bıraktığını algılamasını sağlayan bir --with-valgrind derleme zamanı bayrağı vardır. Bu, PyMalloc'un hafızayı büyük parçalara ayırdığı için, bellek tahsislerinizi daha doğru bir şekilde izlemenizi sağlar.

+0

python çalıştırdığınızda veya python'u derlerken mi? Ben 2.7.1 koşuyorum ve sadece 'valgrind python --with-valgrind myscript.py' yapamam üzgünüm – oob

+2

Üzgünüm, daha açık olmalıydım. Python'u valgrind altında çalışırken algılayacak şekilde yapılandıracak bir derleme zamanı bayrağı.Bazı ayrıntılar burada: http://bugs.python.org/issue2422 –

İlgili konular