Valgrind çıktısını bir dosyaya nasıl yönlendirebilirim?


147

Valgrind aracıyla çalışırken, valgrind aracı tarafından üretilen ayrıntıları günlüğe kaydetmem gerekiyor. Bunu nasıl başarabilirim? Gibi bir şey denedim,

 valgrind a.out | test

ve

 valgrind a.out > test

Valgrind hafıza hatasını değil, sadece program çıktısını verdi, sızıntı bilgisi. Program hiçbir kullanıcı etkileşimi (yani giriş vererek) gerektiriyorsa bile ben böyle alıyorum. Programın kullanıcı girdisine ihtiyacı varsa o şey bile çalışmayacaktır.

Bunu nasıl yapabilirim?


2
Hem şişman hem de stderr'i yönlendirmeyi denedin mi? valgrind a.out &> file
sidyll

Yanıtlar:


415
valgrind --log-file="filename"

1
bu sadece stderr tasarrufu sağlar, hem stderr hem de stdout'u terminalde yazılanla aynı sırayla kaydetmek mümkün müdür (test edilen programın çıktıları ile valgrind tarafından bildirilen hata arasındaki tutarlılığı korumak için)?
Prokop Hapala

78

Varsayılan olarak, Valgrind çıktısını stderr'a yazar. Yani şöyle bir şey yapmanız gerekiyor:

valgrind a.out > log.txt 2>&1

Alternatif olarak, Valgrind'e başka bir yere yazmasını söyleyebilirsiniz; bkz. http://valgrind.org/docs/manual/manual-core.html#manual-core.comment (ama bunu hiç denemedim).


4
Çok teşekkürler :). İşe yaradı. Bana bu "2> & 1" ile ilgili ne söyleyebilir misiniz?
Dinesh

10
@Dinesh: Yönlendirme yapmak için tuhaf Bash sözdizimini açıklayan gnu.org/software/bash/manual/bashref.html#Redirections okunmasını öneririm !
Oliver Charlesworth

16
NOT: bu önerinin a.outçıktılarını aynı günlük dosyasına göndereceğini unutmayın . Valgrind'in çıktısını 's' olmadan günlük dosyasına kaydetmek istiyorsanız, Lex tarafından önerilen seçeneği a.outkullanmalısınız --log-file.
edam

Bu aynı zamanda bellek sızıntılarının ayıklanması için de harika bir cevap!
Ücretsiz Url

10

Günlüklerinizi daha az okumak istiyorsanız --log-fd seçeneklerini de ayarlayabilirsiniz. Örneğin :

valgrind --log-fd=1 ls | less
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.