C++ sınıflarında uygulanan Python uzantıları var. Valgrind ile çalışmak için C++ hedefim yok. Hafıza kontrolü için valgrind kullanmak istiyorum.Python C++ uzantıları ile valgrind'i nasıl kullanabilirim?
Değeri Python ile kullanabilir miyim?
C++ sınıflarında uygulanan Python uzantıları var. Valgrind ile çalışmak için C++ hedefim yok. Hafıza kontrolü için valgrind kullanmak istiyorum.Python C++ uzantıları ile valgrind'i nasıl kullanabilirim?
Değeri Python ile kullanabilir miyim?
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.
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.
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
@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ı? –
Yaptım. Bu yüzden şaşırdım. – Ling
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.
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
Ü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 –
Bu bağlantıyı günceller misiniz lütfen? –