Bagaimana cara mengarahkan output Valgrind ke file?

147

Saat bekerja dengan alat Valgrind, saya perlu mencatat detail yang dihasilkan oleh alat valgrind. Bagaimana saya bisa mencapai itu? Saya mencoba sesuatu seperti,

 valgrind a.out | test

dan

 valgrind a.out > test

Itu hanya memberikan output program dan bukan kesalahan memori valgrind, bocor informasi. Bahkan saya mendapatkan seperti ini jika program tidak memerlukan interaksi pengguna (yaitu memberikan input). Jika program membutuhkan input pengguna, bahkan hal itu sendiri tidak akan berfungsi.

Bagaimana saya bisa melakukan ini?

Dinesh
sumber
2
Sudahkah Anda mencoba mengarahkan ulang stout dan stderr? valgrind a.out &> file
sidyll

Jawaban:

415
valgrind --log-file="filename"
Vasileios Lekakis
sumber
1
ini menghemat hanya stderr, apakah mungkin untuk menyimpan stderr dan stdout ke dalam file yang sama dalam urutan yang sama seperti yang tertulis dalam terminal (yaitu untuk menjaga koherensi antara output dari program yang diuji dan kesalahan yang dilaporkan oleh valgrind)?
Prokop Hapala
78

Secara default, Valgrind menulis outputnya ke stderr. Jadi, Anda perlu melakukan sesuatu seperti:

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

Atau, Anda dapat meminta Valgrind untuk menulis di tempat lain; lihat http://valgrind.org/docs/manual/manual-core.html#manual-core.comment (tapi saya belum pernah mencoba ini).

Oliver Charlesworth
sumber
4
Terima kasih banyak :). Itu berhasil. Bisakah Anda memberi tahu saya ada apa dengan "2> & 1" itu?
Dinesh
10
@Dinesh: Saya sarankan membaca gnu.org/software/bash/manual/bashref.html#Redirections , yang menguraikan sintaks Bash yang aneh untuk melakukan pengalihan!
Oliver Charlesworth
16
CATATAN: bahwa saran ini juga akan mengirim a.outoutput ke file log yang sama. Jika Anda ingin menyimpan output valgrind ke logfile tanpa a.out , Anda harus menggunakan --log-fileopsi yang disarankan oleh Lex.
edam
Ini juga jawaban yang bagus untuk men-debug kebocoran memori!
Url Gratis
10

Anda juga dapat mengatur opsi --log-fd jika Anda hanya ingin membaca log Anda dengan lebih sedikit. Sebagai contoh :

valgrind --log-fd=1 ls | less
Ziad
sumber