2009-01-21 33 views

Trả lời

15

Quá tệ, biến môi trường GMON_OUT_PREFIX không được ghi trong glibc. Tôi nhận được thông tin sau từ web và được kiểm tra trên máy của tôi.

nếu bạn đặt biến môi trường GMON_OUT_PREFIX, thì tệp đầu ra được đặt tên là ${GMON_OUT_PREFIX}.[PID], pid là id của quá trình đã định cấu hình.

Ví dụ:

GMON_OUT_PREFIX=mygmon; gcc -o foo -pg foo.c 

các gmon ra tập tin là: mygmon.12345, giả sử quá trình foo id = 12345.

+0

Như đã nêu bên dưới, bạn muốn đặt GMON_OUT_PREFIX khi chạy, không biên dịch? – Yair

1

Để cung cấp cho một tên tập tin khác nhau để gprof:

gprof a.out gprof-foo.out 

Như để đổi tên họ, thiết lập các biến môi trường GMON_OUT_PREFIX. Tôi tìm thấy điều này bằng cách tốt objdump ol trên libc .... Đương nhiên, các tài liệu libc nói gì.

+0

Tôi thực sự tò mò tại sao điều này không được ghi lại – hhafez

3

giải pháp của jscoot có hiệu quả đối với tôi. nhưng đặt GMON_OUT_PREFIX quan trọng vào thời gian thực thi, không phải lúc biên dịch.

2

Tôi đã gặp phải vấn đề tương tự vào tuần trước và tôi đã giải quyết vấn đề theo cách sau. ý tưởng ở đây là thay đổi thư mục quá trình hiện tại thành bất cứ nơi nào bạn muốn tạo tệp gmon.out. tên tệp không thể thay đổi theo cách này. Nó cho phép bạn thay đổi nơi bạn có thể lưu tệp.

#ifdef GPROF 
         /* so we can gprof */ 
         if (1) { 
          char tmpdir[32]; 
          snprintf(tmpdir, 32, "/tmp/%05d", mypid); 
          mkdir(tmpdir, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); 
          chdir(tmpdir); 
         } 
#endif 
Các vấn đề liên quan