จะเปลี่ยนเส้นทางการส่งออกของ Valgrind ไปยังไฟล์ได้อย่างไร?


147

ในขณะที่ทำงานกับเครื่องมือ Valgrind ฉันต้องบันทึกรายละเอียดที่สร้างโดยเครื่องมือ valgrind ฉันจะทำให้สำเร็จได้อย่างไร ฉันพยายามทำบางสิ่งเช่น

 valgrind a.out | test

และ

 valgrind a.out > test

มันให้ผลลัพธ์ของโปรแกรมไม่ใช่ข้อผิดพลาดของหน่วยความจำ valgrind ข้อมูลการรั่วไหล แม้ว่าฉันจะได้รับเช่นนี้หากโปรแกรมไม่ต้องการการโต้ตอบกับผู้ใช้ (เช่นให้อินพุต) หากโปรแกรมต้องการการป้อนข้อมูลจากผู้ใช้แม้สิ่งนั้นจะไม่ทำงาน

ฉันจะทำสิ่งนี้ได้อย่างไร


2
คุณได้ลองเปลี่ยนเส้นทางทั้งอ้วนและ stderr หรือไม่? valgrind a.out &> file
sidyll

คำตอบ:


415
valgrind --log-file="filename"

1
สิ่งนี้จะบันทึกเพียง stderr เป็นไปได้หรือไม่ที่จะบันทึกทั้ง stderr และ stdout ลงในไฟล์เดียวกันในลำดับเดียวกับที่เขียนไว้ในเทอร์มินัล (เช่นเพื่อให้สอดคล้องกันระหว่างเอาต์พุตของโปรแกรมที่ทดสอบ
Prokop Hapala

78

ตามค่าเริ่มต้น Valgrind จะเขียนเอาต์พุตไปยัง stderr ดังนั้นคุณต้องทำสิ่งที่ชอบ:

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

หรือคุณสามารถบอกให้ Valgrind เขียนที่อื่นได้ ดูhttp://valgrind.org/docs/manual/manual-core.html#manual-core.comment (แต่ฉันไม่เคยลองมาก่อน)


4
ขอบคุณมาก :). มันได้ผล คุณช่วยบอกฉันหน่อยได้ไหมว่า "2> & 1" นั้นคืออะไร
Dinesh

10
@Dinesh: ฉันขอแนะนำให้อ่านgnu.org/software/bash/manual/bashref.html#Redirectionsซึ่งอธิบายถึงไวยากรณ์ Bash ที่แปลกประหลาดสำหรับการเปลี่ยนเส้นทาง!
Oliver Charlesworth

16
หมายเหตุ: คำแนะนำนี้จะส่งa.outเอาต์พุตของไปยังล็อกไฟล์เดียวกัน หากคุณต้องการบันทึกผลลัพธ์ของ valgrind ลงใน logfile โดยไม่ต้อง a.outใช้คุณควรใช้--log-fileตัวเลือกที่ Lex แนะนำ
edam

นี่เป็นคำตอบที่ดีสำหรับการดีบักการรั่วไหลของหน่วยความจำ!
ฟรี Url

10

นอกจากนี้คุณยังสามารถตั้งค่าตัวเลือก - log-fd หากคุณต้องการอ่านบันทึกน้อยลง ตัวอย่างเช่น :

valgrind --log-fd=1 ls | less
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.