Tệp hồ sơ mặc định là từ tệp thực thi được chạy và tệp được gọi là gmon.out
. Có cách nào để chỉ định vị trí mới không?Bất kỳ cách nào để chỉ định vị trí của dữ liệu hồ sơ
Tôi đang sử dụng gcc 3.4.6 trên i386/linux2.6
Tệp hồ sơ mặc định là từ tệp thực thi được chạy và tệp được gọi là gmon.out
. Có cách nào để chỉ định vị trí mới không?Bất kỳ cách nào để chỉ định vị trí của dữ liệu hồ sơ
Tôi đang sử dụng gcc 3.4.6 trên i386/linux2.6
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.
Để 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ì.
Tôi thực sự tò mò tại sao điều này không được ghi lại – hhafez
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.
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
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