2012-02-09 21 views
12

Tôi muốn sử dụng Valgrind 3.7.0 để tìm rò rỉ bộ nhớ trong mã nguồn gốc Java của tôi. Tôi đang sử dụng jdk1.6.0._29.Valgrind và Java

Để làm điều đó, tôi phải đặt cờ --trace-children = yes. Thiết cờ đó, tôi không còn có thể chạy valgrind trên bất kỳ ứng dụng java, thậm chí là một lệnh như:

valgrind --trace-children=yes --smc-check=all java -version 

sẽ nhận được thông báo lỗi:

Error occurred during initialization of VM 
    Unknown x64 processor: SSE2 not supported 

Tôi đã nhìn thấy liên kết này: https://bugs.kde.org/show_bug.cgi?id=249943, nhưng nó không hữu ích.

Chạy chương trình không có Valgrind hoặc không có cờ --trace-children là tốt.

Có ai có ý tưởng nào về những gì tôi có thể làm không?

Trả lời

8

Valgrind bẫy và giả lập (đến một mức độ) bộ vi xử lý, điều này được dường như gây ra JVM để bị lẫn lộn về sự ủng hộ của bạn cho SSE và bailing ra

tôi sẽ đề nghị thử của bạn nói cho JVM không phải bận tâm với SSE , bạn sẽ có thể tắt tính năng này cho điểm phát sóng có cờ JVM -XX:UseSSE=0

Chúc bạn may mắn! valgrinding JVM hơi khó khăn vì chúng có phần thù địch với nhau

Nó cũng có thể là phiên bản valgrind và java của tôi, tôi chạy lệnh của bạn từ trên cục bộ và không gặp vấn đề gì, sử dụng valgrind 3.6.1 và cả java 1.6 .0_26 và java 1.7.0-b147

12

bạn phải tắt JIT chạy JVM dưới valgrind, như vậy:

valgrind java -Djava.compiler=NONE ... 

Ngoài ra, nếu bạn kết thúc bằng đàn áp tạo ra (và nhiều khả năng bạn sẽ!), có thể có vấn đề với độ sâu của ngăn xếp cuộc gọi trong các lệnh chặn được tạo, có nhiều khả năng xảy ra khi chạy dưới JVM.

Trong các phiên bản gần đây của valgrind, các ngăn chặn được tạo có thể chứa ngăn xếp cuộc gọi sâu hơn có thể được xử lý bằng cách tự động kiểm tra/ghi nhớ. Các triệu chứng của vấn đề này là valgrind chấm dứt bất ngờ với thông báo "quá nhiều người gọi trong ngăn xếp dấu vết".

Vấn đề này có thể dễ dàng cố định: trước khi xây dựng valgrind, chỉnh sửa các tập tin coregrind/m_errormgr.c và thay đổi giá trị mã hóa cứng trong #define đến một giá trị lớn hơn (tôi sử dụng 99):

/* Max số người gọi cho ngữ cảnh trong một cuộc đàn áp. */

#define VG_MAX_SUPP_CALLERS 99 

Sau đó, xây dựng và cài đặt valgrind theo tài liệu.

+1

Trong giới hạn người gọi Valgrind mới nhất được đặt thành 500. –

Các vấn đề liên quan