Đầu tiên tôi export PERL5OPT=-d:NYTProf
từ dòng lệnh để tùy chọn gỡ lỗi của tôi sẽ được kế thừa bởi các tiến trình con. Sau đó, tôi khởi chạy chương trình Perl của mình contactd. Nó dĩa để trở thành một quá trình daemon, và sau đó ngã ba/thực hiện chín trường hợp của một chương trình Perl khác, table_manager. (Các exec trông giống như exec /path/to/perl /path/to/table_manager
.) Tại thời điểm này tôi có thể thấy 10 hoặc 11 tập tin mới được gọi là nytprof.out. nnnn; một cho mỗi quá trình đã được chia nhỏ đến tận bây giờ, như mong đợi.Sử dụng Devel :: NYTProf trên chương trình mà fork/execs
Khách hàng kết nối với contactd mà ngã ba/giám đốc điều hành nô lệ, mà lần lượt kết nối với các nhà quản lý bảng chín và chấp nhận yêu cầu từ khách hàng và chuyển chúng đến các nhà quản lý bảng chín.
Sau khi chạy một kết nối máy khách điển hình, tôi tắt tất cả các quy trình máy chủ. Tôi chạy nytprofmerge để hợp nhất các số khác nhau nytprof.out. nnnn tệp vào nytprof-merged.out và sau đó chạy nytprofhtml -f nytprof-merged.out --open
.
Khi báo cáo HTML mở ra, tôi không thấy đề cập đến bất kỳ điều gì nhưng contactd. Các chương trình con hàng đầu chủ yếu là các khối BEGIN, nhập, AUTOLOAD ... các công cụ thực thi sớm.
Điều này dẫn tôi nghĩ rằng NYTPROF là đi qua một ngã ba (dựa trên các tập tin nhiều nytprof.out) nhưng vì một lý do không được tiếp tục hồ sơ các exec 'ed chương trình Perl.
Tôi đang chạy perl 5.16.1 và Devel :: NYTProf mới nhất, trong MacOSX 10.8.2.
Bất kỳ đề xuất nào về những gì tôi chưa làm?
Tôi đã phải thử công việc này, trên một hệ điều hành khác (CentOS), và có một số khác biệt. Tôi đã phải xác định rõ ràng tùy chọn * addpid = 1 * để nhận NYTPROF để thêm pid vào các tệp .out. (Điều này dường như xảy ra tự động trong môi trường OSX của tôi.) Và tôi có mọi thứ tôi muốn, mà không chỉ định forkdepth = -1 (mặc định là mặc định). Vì vậy, tôi sẽ phải cố gắng tối nay trên OSX và xem nếu xác định addpid là câu trả lời, hoặc nếu forkdepth tạo sự khác biệt. – Chap