Valgrind hoạt động như thế nào?


80

Ai đó có thể cung cấp giải thích cấp cao nhất về cách hoạt động của Valgrind không? Một ví dụ: làm thế nào nó biết khi nào bộ nhớ được cấp phát và giải phóng?

Câu trả lời:


106

Về cơ bản, Valgrind chạy ứng dụng của bạn trong một "hộp cát". Trong khi chạy trong hộp cát này, nó có thể chèn các hướng dẫn của riêng mình để thực hiện gỡ lỗi và cấu hình nâng cao.

Từ sách hướng dẫn:

Chương trình của bạn sau đó được chạy trên một CPU tổng hợp được cung cấp bởi lõi Valgrind. Khi mã mới được thực thi lần đầu tiên, lõi giao mã cho công cụ đã chọn. Công cụ này thêm mã thiết bị của riêng mình vào điều này và chuyển kết quả trở lại lõi, điều phối việc thực thi liên tục của mã thiết bị này.

Vì vậy, về cơ bản, valgrind cung cấp một bộ xử lý ảo thực thi ứng dụng của bạn. Tuy nhiên, trước khi hướng dẫn ứng dụng của bạn được xử lý, chúng sẽ được chuyển đến các công cụ (chẳng hạn như memcheck). Những công cụ này giống như các plugin và chúng có thể sửa đổi ứng dụng của bạn trước khi nó được chạy trên bộ xử lý.

Điều tuyệt vời về cách tiếp cận này là bạn không phải sửa đổi hoặc liên kết lại chương trình của mình để chạy nó trong valgrind. Nó làm cho chương trình của bạn chạy chậm hơn, tuy nhiên valgrind không có nghĩa là để đo hiệu suất hoặc chạy trong quá trình thực thi bình thường của ứng dụng của bạn, vì vậy đây không thực sự là một vấn đề.


3
Bài viết này bởi Julian Seward mở rộng một chút về thiết kế của Valgrind: courses.cs.washington.edu/courses/cse326/05wi/valgrind-doc/...
user11171

34

Valgrind là một công cụ Phân tích nhị phân động (DPA) sử dụng khuôn khổ Công cụ đo nhị phân động (DPI) để kiểm tra phân bổ bộ nhớ, phát hiện các bế tắc và cấu hình các ứng dụng. Khung DPI có trình quản lý bộ nhớ cấp thấp, bộ lập lịch, bộ xử lý luồng và bộ xử lý tín hiệu. Bộ công cụ Valgrind bao gồm công cụ như

  1. Memcheck - theo dõi phân bổ bộ nhớ động và báo cáo rò rỉ bộ nhớ.
  2. Helgrind - phát hiện và báo cáo các khóa chết, các cuộc chạy đua dữ liệu tiềm năng và đảo ngược khóa.
  3. Cachegrind - mô phỏng cách ứng dụng tương tác với bộ đệm hệ thống và cung cấp thông tin về các lần bỏ sót bộ đệm.
  4. Nulgrind - một giá trị đơn giản không bao giờ thực hiện bất kỳ phân tích nào. Được các nhà phát triển sử dụng để đánh giá hiệu suất.
  5. Massif - một công cụ để phân tích việc sử dụng bộ nhớ heap của ứng dụng.

Công cụ Valgrind sử dụng cơ chế tháo rời và tổng hợp lại trong đó nó tải ứng dụng vào một quy trình, tháo gỡ mã ứng dụng, thêm mã thiết bị để phân tích, lắp ráp lại và thực thi ứng dụng. Nó sử dụng Just Intime Compiler (JIT) để nhúng ứng dụng với mã thiết bị.

             Valgrind Tool = Valgrind Core + Tool Plugin

Valgrind Core tháo gỡ mã ứng dụng và chuyển đoạn mã tới plugin công cụ cho thiết bị đo đạc. Plugin công cụ thêm mã phân tích và lắp ráp lại. Do đó, Valgrind cung cấp sự linh hoạt để viết công cụ của riêng chúng tôi trên đầu khung Valgrind. Valgrind sử dụng thanh ghi bóng và bộ nhớ bóng để hướng dẫn đọc / ghi thiết bị, đọc / ghi lệnh gọi hệ thống, phân bổ ngăn xếp và heap.

Valgrind cung cấp các trình bao bọc xung quanh cuộc gọi hệ thống và đăng ký các lệnh gọi lại trước và sau cho mọi cuộc gọi hệ thống để theo dõi bộ nhớ được truy cập như một phần của lệnh gọi hệ thống. Vì vậy, Valgrind là một lớp trừu tượng hệ điều hành giữa Hệ điều hành Linux và ứng dụng khách.

Sơ đồ minh họa 8 giai đoạn của Valgrind:

8 pha Valgrind


bạn có thể vui lòng cho tôi biết nguồn của thông tin này hoặc bất kỳ liên kết nào chứa những chi tiết này không? cảm ơn.
mezda

4

valgrind nằm như một lớp giữa chương trình của bạn và hệ điều hành, chặn các cuộc gọi tới hệ điều hành yêu cầu cấp phát bộ nhớ (de) và ghi lại những gì đang được thao tác trước khi thực sự cấp phát bộ nhớ và chuyển lại một phần tương đương. Về cơ bản, đó là cách hoạt động của hầu hết các trình cấu hình mã, ngoại trừ ở cấp thấp hơn nhiều (lệnh gọi hệ thống thay vì lệnh gọi hàm chương trình).



2

Valgrind về cơ bản là một máy ảo thực thi chương trình của bạn. Nó là một kiến ​​trúc ảo chặn mỗi cuộc gọi để cấp phát / giải phóng bộ nhớ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.