Đây là lệnh perldtrace có thể được chạy trong nhà cung cấp dịch vụ lưu trữ miễn phí OnWorks bằng cách sử dụng một trong nhiều máy trạm trực tuyến miễn phí của chúng tôi như Ubuntu Online, Fedora Online, trình giả lập trực tuyến Windows hoặc trình mô phỏng trực tuyến MAC OS
CHƯƠNG TRÌNH:
TÊN
perldtrace - Perl hỗ trợ DTrace
SYNOPSIS
# dtrace -Zn 'perl :: sub-entry, perl :: sub-return {trace (copyinstr (arg0))}'
dtrace: description 'perl :: sub-entry, perl :: sub-return' khớp với 10 đầu dò
# perl -E 'sub bên ngoài {bên trong (@_)} bên trong bên trong {say shift} bên ngoài ("xin chào")'
xin chào
(đầu ra dtrace)
CHỨC NĂNG ID CPU: TÊN
0 75915 Perl_pp_entersub: mục nhập phụ BEGIN
0 75915 Perl_pp_entersub: nhập mục nhập phụ
0 75922 Perl_pp_leavesub: nhập trả lại phụ
0 75922 Perl_pp_leavesub: trả về phụ BEGIN
0 75915 Perl_pp_entersub: mục nhập phụ bên ngoài
0 75915 Perl_pp_entersub: mục nhập phụ bên trong
0 75922 Perl_pp_leavesub: sub-return bên trong
0 75922 Perl_pp_leavesub: sub-return bên ngoài
MÔ TẢ
DTrace là một khuôn khổ để theo dõi toàn diện ở cấp độ ứng dụng và hệ thống. Perl là một
DTrace nhà cung cấp dịch vụ, có nghĩa là nó cho thấy một số tàu thăm dò cho thiết bị đo đạc. Bạn có thể sử dụng những
kết hợp với các đầu dò cấp hạt nhân, cũng như các đầu dò từ các nhà cung cấp khác như
MySQL, để chẩn đoán lỗi phần mềm, hoặc thậm chí chỉ là tắc nghẽn của ứng dụng của bạn.
Perl phải được biên dịch với tùy chọn "-Dusedtrace" để sử dụng
đầu dò. Mặc dù DTrace nhằm mục đích không có chi phí khi thiết bị đo của nó không hoạt động,
Bản thân sự hỗ trợ của Perl không thể duy trì sự đảm bảo đó, vì vậy nó được xây dựng mà không có đầu dò DTrace
trong hầu hết các hệ thống. Một ngoại lệ đáng chú ý là Mac OS X cung cấp một / usr / bin / perl với
Đã bật hỗ trợ DTrace.
LỊCH SỬ
5.10.1
Hỗ trợ DTrace ban đầu của Perl đã được thêm vào, cung cấp "mục nhập phụ" và "trả lại phụ"
đầu dò.
5.14.0
Các đầu dò "mục nhập con" và "trả lại phụ" thu được đối số thứ tư: tên gói của
chức năng.
5.16.0
Đầu dò "thay đổi pha" đã được thêm vào.
5.18.0
Các đầu dò "op-entry", "loading-file" và "load-file" đã được thêm vào.
LỢI NHUẬN
mục nhập phụ (SUBNAME, FILE, LINE, PACKAGE)
Theo dõi mục nhập của bất kỳ chương trình con nào. Lưu ý rằng tất cả các biến đều tham chiếu đến
chương trình con đang được gọi; hiện tại không có cách nào để có được bất kỳ
thông tin về chương trình con của người gọi từ một hành động DTrace.
: * perl * :: tiểu mục {
printf ("% s ::% s được nhập tại% s dòng% d \ n",
copyinstr (arg3), copyinstr (arg0), copyinstr (arg1), arg2);
}
trả lại phụ (SUBNAME, FILE, LINE, PACKAGE)
Theo dõi lối ra của bất kỳ chương trình con nào. Lưu ý rằng tất cả các biến đều tham chiếu đến
chương trình con đang trả về; hiện tại không có cách nào để có được bất kỳ
thông tin về chương trình con của người gọi từ một hành động DTrace.
: * perl * :: sub-return {
printf ("% s ::% s trả về tại% s dòng% d \ n",
copyinstr (arg3), copyinstr (arg0), copyinstr (arg1), arg2);
}
thay đổi pha (NEWPHASE, OLDPHASE)
Theo dõi các thay đổi đối với trạng thái thông dịch viên của Perl. Bạn có thể xác định nội dung này dưới dạng truy tìm
thay đổi đối với biến "$ {^ GLOBAL_PHASE}" của Perl, đặc biệt là vì các giá trị cho
"NEWPHASE" và "OLDPHASE" là các chuỗi "$ {^ GLOBAL_PHASE}" báo cáo.
: * perl * :: phase-change {
printf ("Pha đã thay đổi từ% s thành% s \ n",
copyinstr (arg1), copyinstr (arg0));
}
op-entry (OPNAME)
Theo dõi việc thực thi từng opcode trong Perl runloop. Đầu dò này được bắn trước
opcode được thực thi. Khi trình gỡ lỗi Perl được kích hoạt, đầu dò DTrace sẽ được kích hoạt
sau khi trình gỡ lỗi móc (nhưng vẫn còn trước khi chính opcode được thực thi).
: * perl * :: op-entry {
printf ("Sắp thực thi opcode% s \ n", copyinstr (arg0));
}
tải-tập tin (FILENAME)
Kích hoạt khi Perl chuẩn bị tải một tệp riêng lẻ, cho dù từ "sử dụng", "yêu cầu" hoặc
"làm". Đầu dò này kích hoạt trước khi tệp được đọc từ đĩa. Đối số tên tệp là
được chuyển đổi thành đường dẫn hệ thống tệp cục bộ thay vì cung cấp tên kiểu "Mô-đun :: Tên".
: * perl *: loading-file {
printf ("Sắp tải% s \ n", copyinstr (arg0));
}
tệp đã tải (FILENAME)
Kích hoạt khi Perl đã tải thành công một tệp riêng lẻ, cho dù từ "sử dụng",
"request" hoặc "do". Đầu dò này kích hoạt sau khi tệp được đọc từ đĩa và nội dung của nó
đã đánh giá. Đối số tên tệp được chuyển đổi thành đường dẫn hệ thống tệp cục bộ thay vì
cung cấp các tên kiểu "Mô-đun :: Tên".
: * perl *: load-file {
printf ("Đã tải thành công% s \ n", copyinstr (arg0));
}
VÍ DỤ
Các hàm thường được gọi nhất
# dtrace -qZn 'mục phụ {@ [strjoin (strjoin (copyinstr (arg3), "::"), copyinstr (arg0))] = count ()} HẾT {trunc (@, 10)}'
Lớp :: MOP :: Thuộc tính :: vị trí 400
Hãy thử :: Tiny :: bắt 411
Hãy thử :: Tiny :: thử 411
Lớp :: MOP :: Instance :: inline_slot_access 451
Lớp :: MOP :: Lớp :: Bất biến :: Đặc điểm ::: khoảng 472
Lớp :: MOP :: Mixin :: AttributeCore :: has_initializer 496
Lớp :: MOP :: Phương thức :: Wrapped :: __ ANON__ 544
Lớp :: MOP :: Gói :: _ package_stash 737
Lớp :: MOP :: Lớp :: khởi tạo 1128
Lớp :: MOP :: get_metaclass_by_name 1204
Theo dõi các cuộc gọi hàm
# dtrace -qFZn 'sub-entry, sub-return {trace (copyinstr (arg0))}'
0 -> Perl_pp_entersub BEGIN
0 <- Perl_pp_leavesub BEGIN
0 -> Perl_pp_entersub BEGIN
0 -> Nhập Perl_pp_entersub
0 <- Perl_pp_leavesub nhập
0 <- Perl_pp_leavesub BEGIN
0 -> Perl_pp_entersub BEGIN
0 -> Váy Perl_pp_entersub
0 <- Váy Perl_pp_leavesub
0 -> Perl_pp_entersub bẩn
0 <- Perl_pp_leavesub bẩn
0 -> Perl_pp_entersub làm trắng
0 <- Perl_pp_leavesub làm trắng
0 <- Perl_dounwind BEGIN
Các lệnh gọi hàm trong quá trình dọn dẹp thông dịch viên
# dtrace -Zn 'phase-change / copyinstr (arg0) == "END" / {self-> end = 1} sub-entry / self-> ending / {trace (copyinstr (arg0))}'
CHỨC NĂNG ID CPU: TÊN
1 77214 Perl_pp_entersub: mục nhập phụ END
1 77214 Perl_pp_entersub: mục nhập phụ END
1 77214 Perl_pp_entersub: dọn dẹp mục nhập phụ
1 77214 Perl_pp_entersub: sub-entry _force_wuality
1 77214 Perl_pp_entersub: sub-entry _force_wuality
Hệ thống gọi tại thời điểm biên dịch
# dtrace -qZn 'phase-change / copyinstr (arg0) == "START" / {self-> thú vị = 1} phase-change / copyinstr (arg0) == "RUN" / {self-> thú vị = 0} syscall ::: / self-> thú vị / {@ [probefunc] = count ()} HẾT {trunc (@, 3)} '
tìm kiếm 310
đọc 374
thống kê64 1056
Các hàm Perl thực thi nhiều mã opc nhất
# dtrace -qZn 'sub-entry {self-> fqn = strjoin (copyinstr (arg3), strjoin ("::", copyinstr (arg0)))} op-entry / self-> fqn! = "" / {@ [self-> fqn] = count ()} HẾT {trunc (@, 3)} '
cảnh báo :: không quan trọng 4589
Nhà xuất khẩu :: Heavy :: _ build_cache 5039
Nhà xuất khẩu :: nhập khẩu 14578
THAM KHẢO
Hướng dẫn theo dõi động DTrace
<http://dtrace.org/guide/preface.html>
DTrace: Theo dõi động trong Oracle Solaris, Mac OS X và FreeBSD
<http://www.amazon.com/DTrace-Dynamic-Tracing-Solaris-FreeBSD/dp/0132091518/>
Sử dụng perldtrace trực tuyến bằng các dịch vụ onworks.net