Ini ialah arahan perldtrace yang boleh dijalankan dalam penyedia pengehosan percuma OnWorks menggunakan salah satu daripada berbilang stesen kerja dalam talian percuma kami seperti Ubuntu Online, Fedora Online, emulator dalam talian Windows atau emulator dalam talian MAC OS.
JADUAL:
NAMA
perldtrace - Sokongan Perl untuk DTrace
SINOPSIS
# dtrace -Zn 'perl::sub-entry, perl::sub-return { trace(copyinstr(arg0)) }'
dtrace: perihalan 'perl::sub-entry, perl::sub-return ' dipadankan dengan 10 probe
# perl -E 'sub luar { dalam(@_) } sub dalam { sebut shift } luar("hello")'
hello
(output dtrace)
ID CPU FUNGSI:NAME
0 75915 Perl_pp_entersub:sub-entry BERMULA
0 75915 Perl_pp_entersub:sub-entry import
0 75922 Perl_pp_leavesub:sub-return import
0 75922 Perl_pp_leavesub:sub-return BERMULA
0 75915 Perl_pp_entersub:sub-entry luar
0 75915 Perl_pp_entersub:sub-entry dalam
0 75922 Perl_pp_leavesub:sub-kembali dalam
0 75922 Perl_pp_leavesub:sub-return luar
DESCRIPTION
DTrace ialah rangka kerja untuk pengesanan peringkat sistem dan aplikasi yang komprehensif. Perl ialah a
DTrace pembekal, bermakna ia mendedahkan beberapa pemeriksaan untuk instrumentasi. Anda boleh menggunakan ini
bersama-sama dengan probe peringkat kernel, serta probe daripada pembekal lain seperti
MySQL, untuk mendiagnosis kecacatan perisian, atau bahkan hanya kesesakan aplikasi anda.
Perl mesti disusun dengan pilihan "-Dusedtrace" untuk menggunakan yang disediakan
kuar. Walaupun DTrace bertujuan untuk tidak mempunyai overhed apabila instrumentasinya tidak aktif,
Sokongan Perl sendiri tidak dapat mempertahankan jaminan itu, jadi ia dibina tanpa probe DTrace
di bawah kebanyakan sistem. Satu pengecualian yang ketara ialah Mac OS X menghantar a /usr/bin/perl bersama
Sokongan DTrace didayakan.
SEJARAH
5.10.1
Sokongan DTrace awal Perl telah ditambahkan, menyediakan "sub-entry" dan "sub-return"
penyiasat.
5.14.0
Probe "sub-entry" dan "sub-return" mendapat hujah keempat: nama pakej
fungsinya.
5.16.0
Siasatan "perubahan fasa" telah ditambah.
5.18.0
Probe "op-entry", "loading-file", dan "loaded-file" telah ditambahkan.
MASALAH
sub-entri(SUBNAME, FAIL, LINE, PACKAGE)
Mengesan kemasukan mana-mana subrutin. Ambil perhatian bahawa semua pembolehubah merujuk kepada
subrutin yang sedang digunakan; pada masa ini tiada cara untuk mendapatkan apa-apa
maklumat tentang subrutin itu pemanggil daripada tindakan DTrace.
:*perl*::sub-entry {
printf("%s::%s dimasukkan pada %s baris %d\n",
copyinstr(arg3), copyinstr(arg0), copyinstr(arg1), arg2);
}
sub-pulangan(SUBNAME, FAIL, LINE, PACKAGE)
Mengesan keluar mana-mana subrutin. Ambil perhatian bahawa semua pembolehubah merujuk kepada
subrutin yang kembali; pada masa ini tiada cara untuk mendapatkan apa-apa
maklumat tentang subrutin itu pemanggil daripada tindakan DTrace.
:*perl*::sub-return {
printf("%s::%s dikembalikan pada %s baris %d\n",
copyinstr(arg3), copyinstr(arg0), copyinstr(arg1), arg2);
}
perubahan fasa (FASA BARU, FASA LAMA)
Mengesan perubahan kepada keadaan penterjemah Perl. Anda boleh menghayati ini sebagai pengesanan
perubahan kepada pembolehubah "${^GLOBAL_PHASE}" Perl, terutamanya kerana nilai untuk
"NEWPHASE" dan "OLDPHASE" ialah rentetan yang dilaporkan "${^GLOBAL_PHASE}".
:*perl*::fasa-perubahan {
printf("Fasa ditukar daripada %s kepada %s\n",
copyinstr(arg1), copyinstr(arg0));
}
op-entry(OPNAME)
Mengesan pelaksanaan setiap opcode dalam runloop Perl. Siasatan ini dilepaskan sebelum ini
opcode dilaksanakan. Apabila penyahpepijat Perl didayakan, siasatan DTrace dicetuskan
selepas cangkuk debugger (tetapi masih sebelum opcode itu sendiri dilaksanakan).
:*perl*::op-entry {
printf("Tentang melaksanakan opcode %s\n", copyinstr(arg0));
}
memuatkan-fail(FILENAME)
Menyala apabila Perl akan memuatkan fail individu, sama ada dari "use", "require", atau
"buat". Siasatan ini menyala sebelum fail dibaca dari cakera. Hujah nama fail ialah
ditukar kepada laluan sistem fail tempatan dan bukannya memberikan nama gaya "Modul::Name".
:*perl*:loading-file {
printf("Tentang memuatkan %s\n", copyinstr(arg0));
}
fail dimuatkan(FILENAME)
Menyala apabila Perl telah berjaya memuatkan fail individu, sama ada dari "use",
"memerlukan", atau "melakukan". Siasatan ini menyala selepas fail dibaca dari cakera dan kandungannya
dinilai. Argumen nama fail ditukar kepada laluan sistem fail tempatan dan bukannya
menyediakan nama gaya "Modul::Name".
:*perl*:loaded-file {
printf("Berjaya memuatkan %s\n", copyinstr(arg0));
}
CONTOH
Fungsi yang paling kerap dipanggil
# dtrace -qZn 'sub-entry { @[strjoin(strjoin(copyinstr(arg3),"::"),copyinstr(arg0))] = count() } TAMAT {trunc(@, 10)}'
Kelas::MOP::Atribut::slot 400
Cuba::Tiny::tangkap 411
Cuba::Tiny::cuba 411
Kelas::MOP::Instance::inline_slot_access 451
Kelas::MOP::Kelas::Kekal::Sifat:::sekitar 472
Kelas::MOP::Mixin::AttributeCore::has_initializer 496
Kelas::MOP::Kaedah::Dibalut::__ANON__ 544
Kelas::MOP::Pakej::_package_stash 737
Kelas::MOP::Kelas::mulakan 1128
Kelas::MOP::get_metaclass_by_name 1204
Jejaki panggilan fungsi
# dtrace -qFZn 'sub-entry, sub-return { trace(copyinstr(arg0)) }'
0 -> Perl_pp_entersub BERMULA
0 <- Perl_pp_leavesub BERMULA
0 -> Perl_pp_entersub BERMULA
0 -> Perl_pp_entersub import
0 <- Perl_pp_leavesub import
0 <- Perl_pp_leavesub BERMULA
0 -> Perl_pp_entersub BERMULA
0 -> Perl_pp_entersub pakaian
0 <- Perl_pp_leavesub pakaian
0 -> Perl_pp_entersub kotor
0 <- Perl_pp_leavesub kotor
0 -> Perl_pp_entersub memutih
0 <- Perl_pp_leavesub whiten
0 <- Perl_dounwind BERMULA
Panggilan fungsi semasa pembersihan jurubahasa
# dtrace -Zn 'fasa-perubahan /copyinstr(arg0) == "END"/ { self->ending = 1 } sub-entry /self->ending/ { trace(copyinstr(arg0)) }'
ID CPU FUNGSI:NAME
1 77214 Perl_pp_entersub:sub-entry END
1 77214 Perl_pp_entersub:sub-entry END
1 77214 Perl_pp_entersub:pembersihan sub-entry
1 77214 Perl_pp_entersub:sub-entry _force_writable
1 77214 Perl_pp_entersub:sub-entry _force_writable
Panggilan sistem pada masa penyusunan
# dtrace -qZn 'phase-change /copyinstr(arg0) == "START"/ { self->interesting = 1 } phase-change /copyinstr(arg0) == "RUN"/ { self-interesting = 0 } syscall ::: /self->menarik/ { @[probefunc] = count() } TAMAT { trunc(@, 3) }'
lcari 310
baca 374
stat64 1056
Fungsi Perl yang melaksanakan kebanyakan opcode
# dtrace -qZn 'sub-entry { self->fqn = strjoin(copyinstr(arg3), strjoin("::", copyinstr(arg0))) } op-entry /self->fqn != ""/ { @ [self->fqn] = count() } TAMAT { trunc(@, 3) }'
amaran::nyahimport 4589
Pengeksport::Heavy::_rebuild_cache 5039
Pengeksport::import 14578
RUJUKAN
Panduan Pengesanan Dinamik DTrace
<http://dtrace.org/guide/preface.html>
DTrace: Pengesanan Dinamik dalam Oracle Solaris, Mac OS X dan FreeBSD
<http://www.amazon.com/DTrace-Dynamic-Tracing-Solaris-FreeBSD/dp/0132091518/>
Gunakan perldtrace dalam talian menggunakan perkhidmatan onworks.net