2010-03-08 23 views
15

Tôi muốn sử dụng valgrind để làm một số hồ sơ, vì nó không cần phải xây dựng lại chương trình. (Chương trình tôi muốn hồ sơ đã được xây dựng với “-g")Cách sử dụng callgrind để lược tả chỉ một khoảng thời gian thực hiện chương trình nhất định?

Nhưng valgrind (callgrind) là khá chậm ... vì vậy đây là những gì tôi phải làm:

  1. khởi động server (Tôi muốn để cấu hình máy chủ)
  2. loại gắn vào máy chủ
  3. rằng trước khi tôi làm một số hoạt động trên máy chủ, bắt đầu thu thập dữ liệu hồ sơ
  4. sau ca phẫu thuật được thực hiện, kết thúc việc thu thập dữ liệu hồ sơ
  5. phân tích dữ liệu hồ sơ.

Tôi có thể làm điều này bằng cách sử dụng studio mặt trời trên Solaris. (sử dụng dbx). Tôi chỉ muốn biết là nó có thể làm điều tương tự bằng cách sử dụng valgrind (callgrind)?

Cảm ơn

+1

Hệ điều hành nào? –

+0

Vâng, đó là Linux – superb

+0

Tôi hy vọng Valgrind không phải là lựa chọn duy nhất của bạn. Bạn đã xem kỹ thuật này chưa: (http://stackoverflow.com/questions/375913/what-can-i-use-to-profile-c-code-in-linux/378024#378024) Bạn cũng có thể sử dụng * * pstack ** hoặc ** lsstack ** để làm điều tương tự. Đối với tiền, bạn có thể có được RotateRight/Zoom mà là khá tốt. –

Trả lời

4

Bạn không nói gì OS - Tôi giả định Linux - trong trường hợp này bạn có thể muốn nhìn vào oprofile (miễn phí) hoặc Zoom (không miễn phí, nhưng bạn có thể nhận được một giấy phép đánh giá) , cả hai đều là trình biên dịch lấy mẫu và có thể lập cấu hình mã hiện có mà không cần biên dịch lại. Zoom là đẹp hơn và dễ sử dụng hơn (nó có một GUI và một số tính năng bổ sung tốt đẹp), nhưng bạn có thể đã có oprofile trên hệ thống của bạn.

+0

Có, tôi chỉ thấy một số kẻ khác đề xuất 2 công cụ này. Đối với tôi, điểm để sử dụng valgrind là nó không truy cập root vì tôi đang sử dụng máy chủ công cộng để làm hồ sơ ... – superb

+0

Tôi nghĩ bạn chỉ cần quyền truy cập root để * cài đặt * những công cụ này - bạn sẽ có thể chạy chúng mà không cần truy cập root, không? (Tôi sử dụng Zoom từ một tài khoản không phải root bình thường, nhưng đó là cho hồ sơ địa phương, vì vậy tôi không thể chắc chắn về trường hợp hồ sơ từ xa.) –

+0

Tôi thấy, cảm ơn.Nhưng tôi vẫn muốn biết nếu nó có thể sử dụng valgrind để làm điều tương tự. Đôi khi tôi không thể tái tạo vấn đề hiệu suất, tôi cần xem xét trực tiếp máy thử nghiệm, nhưng cài đặt phần mềm lược tả (có thể thu thập bộ đếm phần cứng) có thể ảnh hưởng đến hiệu suất của hệ thống và rất nhiều điều chỉnh ban đầu không được phép .. Vì vậy, valgrind là vẫn là lựa chọn tốt nhất, nếu tôi có thể sử dụng nó theo cách tôi mô tả trong câu hỏi. – superb

27

Bạn nên xem callgrind documentation và đọc về callgrind_control.

  1. Khởi chạy ứng dụng của bạn: valgrind --tool=callgrind --instr-atstart=no your_server.x
  2. Xem 1.
  3. bắt đầu thu thập dữ liệu hồ sơ: callgrind_control -i on
  4. cuối thu thập dữ liệu hồ sơ: callgrind_control -i off
  5. Phân tích dữ liệu với kcachegrind hoặc callgrind_annotate/cg_annotate
6

Đối với hồ sơ chỉ có một số chức năng bạn cũng có thể thấy hữu ích CALLGRIND_START_INSTRUMENTATIONCALLGRIND_STOP_INSTRUMENTATION từ <valgrind/callgrind.h> header và sử dụng tùy chọn callgrind của --instr-atstart=no như đề xuất trong Doomsday's answer.

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