2010-05-19 40 views
11

Khi tôi sử dụng valgrind để giúp gỡ lỗi một ứng dụng tôi đã làm việc trên tôi nhận thấy một lớn về tiếng ồn mà dường như là phàn nàn về thư viện chuẩn. Như một thử nghiệm tôi đã làm điều này;Valgrind 'tiếng ồn', có nghĩa là gì?

echo 'int main() {return 0;}' | gcc -x c -o test - 

Sau đó, tôi đã thực hiện việc này;

valgrind ./test 

==1096== Use of uninitialised value of size 8 
==1096== at 0x400A202: _dl_new_object (in /lib64/ld-2.10.1.so) 
==1096== by 0x400607F: _dl_map_object_from_fd (in /lib64/ld-2.10.1.so) 
==1096== by 0x4007A2C: _dl_map_object (in /lib64/ld-2.10.1.so) 
==1096== by 0x400199A: map_doit (in /lib64/ld-2.10.1.so) 
==1096== by 0x400D495: _dl_catch_error (in /lib64/ld-2.10.1.so) 
==1096== by 0x400189E: do_preload (in /lib64/ld-2.10.1.so) 
==1096== by 0x4003CCD: dl_main (in /lib64/ld-2.10.1.so) 
==1096== by 0x401404B: _dl_sysdep_start (in /lib64/ld-2.10.1.so) 
==1096== by 0x4001471: _dl_start (in /lib64/ld-2.10.1.so) 
==1096== by 0x4000BA7: (within /lib64/ld-2.10.1.so) 
* large block of similar snipped * 
==1096== Use of uninitialised value of size 8 
==1096== at 0x4F35FDD: (within /lib64/libc-2.10.1.so) 
==1096== by 0x4F35B11: (within /lib64/libc-2.10.1.so) 
==1096== by 0x4A1E61C: _vgnU_freeres (vg_preloaded.c:60) 
==1096== by 0x4E5F2E4: __run_exit_handlers (in /lib64/libc-2.10.1.so) 
==1096== by 0x4E5F354: exit (in /lib64/libc-2.10.1.so) 
==1096== by 0x4E48A2C: (below main) (in /lib64/libc-2.10.1.so) 
==1096== 
==1096== ERROR SUMMARY: 3819 errors from 298 contexts (suppressed: 876 from 4) 
==1096== malloc/free: in use at exit: 0 bytes in 0 blocks. 
==1096== malloc/free: 0 allocs, 0 frees, 0 bytes allocated. 
==1096== For counts of detected errors, rerun with: -v 
==1096== Use --track-origins=yes to see where uninitialised values come from 
==1096== All heap blocks were freed -- no leaks are possible. 

Bạn có thể xem kết quả đầy đủ ở đây: http://pastebin.com/gcTN8xGp

Tôi có hai câu hỏi; trước tiên là có một cách để ngăn chặn tất cả các tiếng ồn?

--show-below-main được đặt thành không theo mặc định, nhưng dường như không phải là tương đương - sau-chính.

Trả lời

5

Nâng cấp lên Valgrind 3.5.0 trở lên. Trong số những thứ khác, các tệp .supp mặc định đã được cập nhật.

12

Bạn có thể ngăn chặn đầu ra bằng cách thêm

{ 
    ld error suppression 
    Memcheck:Cond 
    fun:dl_main 
    fun:_dl_sysdep_start 
    fun:_dl_start 
    obj:/lib64/ld-2.10.1.so 
} 

để /usr/lib/valgrind/default.supp (hoặc định nghĩa các file ức chế của riêng bạn).

Dường như nó là một trình liên kết/lỗi trình tải xuống đã biết, ít nhất là với Debian & Các nhà phát triển Linux của Arch; Tôi không chắc chắn về phần còn lại, cũng như quá trình hành động theo kế hoạch của họ.

+0

Vấn đề này là sử dụng glibc mới hơn so với những gì Valgrind quen thuộc. 1 để chỉ cho tôi đúng hướng. –

4

Tôi có những triệu chứng này theo thời gian và giải pháp luôn là nâng cấp các gói valgrind và libc của tôi để được đồng bộ. Các yêu tinh nhỏ bé ở Debian chăm sóc phần còn lại.