2012-06-28 30 views
15

aşağıdaki parametrelerle Valgrind çalıştırın: Bellek sızıntılarını olarakTam çağrı yığını, Valgrind'den nasıl alınır?

--leak-check=full --show-reachable=yes --leak-resolution=high --num-callers=100 --trace-children=yes 

log, ben ana kadar iz tam yığını bazı hata mesajları görecek, ancak bazı iletiler aşağıdaki gibi görünecektir:

==3956== 1,999,140 (68,796 direct, 1,930,344 indirect) bytes in 5,733 blocks are definitely lost in loss record 8,842 of 8,845 
==3956== at 0x4022AB8: malloc (vg_replace_malloc.c:207) 
==3956== 

nasıl Bu hatalar için tam yığın izini alabilir miyim?

+0

Valgrind'in en son yayımlanan sürümü yalnızca -num-arayanları 50'ye kadar destekler. Bu nedenle, hangi sürümü kullandığınız belli değildir. Yukarıdaki yığın izi eksik görünüyor. Bu, uygulamanızın derlenmesiyle bağlantılı olabilir (örneğin, seçenek-çerçeve-işaretçisi yığın izlemenin üretilmesini daha zor hale getirebilir) – phd

+0

Bump. (stackoverflow "" mesajları "yumruk mu?) Aynı sorun. -g ile bir uygulama derleniyor. Bu, malloc(), malloc() olarak adlandırılan işlev ve sonra ana(), ana() ile aynı dosya içindeki işlevler de dahil olmak üzere, aradaki her şeyi atlayan bir yığın izlemesiyle olası bellek sızıntılarını gösterir. ?? Bu 3 yığın çerçeve sınırına sahip olmayan çevrimiçi örnekleri görüyorum .. ?? Herhangi bir fikir? – Samuel

+0

Ubuntu 13.10'da valgrind 3.8.1 kullanıyorum ve tüm ara çağrıları içermeyen yığın izlerini görüyorum. Gcc ile derlerken herhangi bir optimizasyon (veya belki de -Og veya bir şeye ihtiyacımız var ...) – thoni56

cevap

14

Tam yığın izlemenin alınması, bir sızıntıya (ve --num-callers tarafından belirlenen sınırlar dahilinde) dahil olabilecek tüm kitaplıklar/yürütülebilir dosyalar için hata ayıklama simgeleri gerektirir.

Bunlardan herhangi birini oluşturuyorsanız, gcc'de (veya diğer bir derleyicideki ilgili bayrağı) -g bayrağını belirtmeniz gerekir. kusursuz değil ve bazen sızıntı kaçırmak veya (eğer konuları kullanarak veya komplike class uygulamaları yaparken özellikle) tam yığın izlerini sağlayamadığı olabileceğini

Not.

Hata ayıklama bilgisi olmayan kütüphaneler için yığın izleme bu kitaplıkta duracaktır.

Ücretsiz bir araç için, yaptıklarında çok iyi, ancak IBM'in büyük paralar için bellek profilleri satabilmesinin bir nedeni var.

+6

Teşekkürler, benim durumumda --num-arayanlar seçeneğini ayarlamak zorunda kaldım. Varsayılan, 12, STL ve benzeri için oldukça düşük gibi görünüyor. – cib