これは、Ubuntu Online、Fedora Online、Windowsオンラインエミュレーター、MACOSオンラインエミュレーターなどの複数の無料オンラインワークステーションのXNUMXつを使用してOnWorks無料ホスティングプロバイダーで実行できるコマンドperldtraceです。
プログラム:
NAME
perldtrace-DTraceに対するPerlのサポート
SYNOPSIS
#dtrace -Zn'perl :: sub-entry、perl :: sub-return {trace(copyinstr(arg0))} '
dtrace:description'perl :: sub-entry、perl :: sub-return '一致した10個のプローブ
#perl -E 'サブアウター{インナー(@_)}サブインナー{言うシフト}アウター( "hello")'
こんにちは
(dtrace出力)
CPU ID機能:名前
0 75915 Perl_pp_entersub:sub-entry BEGIN
0 75915 Perl_pp_entersub:sub-entry import
0 75922 Perl_pp_leavesub:sub-インポートを返す
0 75922 Perl_pp_leavesub:sub-BEGINを返します
0 75915 Perl_pp_entersub:sub-entryouter
0 75915 Perl_pp_entersub:sub-entryinner
0 75922 Perl_pp_leavesub:sub-内部を返す
0 75922 Perl_pp_leavesub:sub-外部を返す
DESCRIPTION
DTraceは、包括的なシステムレベルおよびアプリケーションレベルのトレースのためのフレームワークです。 Perlは
DTrace プロバイダー、つまり、いくつかを公開します プローブ 計装用。 あなたはこれらを使うことができます
カーネルレベルのプローブ、および次のような他のプロバイダーからのプローブと組み合わせて
MySQL、ソフトウェアの欠陥、またはアプリケーションのボトルネックを診断するため。
提供されているものを利用するには、Perlを「-Dusedtrace」オプションでコンパイルする必要があります
プローブ。 DTraceは、インストルメンテーションがアクティブでないときにオーバーヘッドが発生しないことを目指していますが、
Perlのサポート自体はその保証を維持できないため、DTraceプローブなしで構築されています
ほとんどのシステムで。 注目すべき例外のXNUMXつは、Mac OSXが / usr / bin / perl
DTraceサポートが有効になっています。
HISTORY
5.10.1
Perlの最初のDTraceサポートが追加され、「サブエントリ」と「サブリターン」が提供されました
プローブ。
5.14.0
「サブエントリ」および「サブリターン」プローブは、XNUMX番目の引数を取得します。
関数。
5.16.0
「相変化」プローブが追加されました。
5.18.0
「op-entry」、「loading-file」、および「loaded-file」プローブが追加されました。
プローブ
サブエントリ(SUBNAME、FILE、LINE、PACKAGE)
任意のサブルーチンのエントリをトレースします。 すべての変数がを参照していることに注意してください
呼び出されているサブルーチン。 現在、何かを手に入れる方法はありません
サブルーチンに関する情報 発信者 DTraceアクションから。
:* perl * :: sub-entry {
printf( "%s ::%sが%s行%dに入力されました\ n"、
copyinstr(arg3)、copyinstr(arg0)、copyinstr(arg1)、arg2);
}
sub-return(SUBNAME、FILE、LINE、PACKAGE)
任意のサブルーチンの終了をトレースします。 すべての変数がを参照していることに注意してください
返されるサブルーチン。 現在、何かを手に入れる方法はありません
サブルーチンに関する情報 発信者 DTraceアクションから。
:* perl * :: sub-return {
printf( "%s ::%sが%s行%dで返されました\ n"、
copyinstr(arg3)、copyinstr(arg0)、copyinstr(arg1)、arg2);
}
相変化(NEWPHASE、OLDPHASE)
Perlのインタプリタ状態への変更をトレースします。 これをトレースとして内部化できます
Perlの "$ {^ GLOBAL_PHASE}"変数への変更、特に
「NEWPHASE」と「OLDPHASE」は、「$ {^ GLOBAL_PHASE}」が報告する文字列です。
:* perl * :: phase-change {
printf( "フェーズが%sから%sに変更されました\ n"、
copyinstr(arg1)、copyinstr(arg0));
}
op-entry(OPNAME)
Perlランループ内の各オペコードの実行をトレースします。 このプローブは前に発射されます
オペコードが実行されます。 Perlデバッガーが有効になっている場合、DTraceプローブが起動されます
After デバッガーがフックします(ただし、オペコード自体が実行される前です)。
:* perl * :: op-entry {
printf( "オペコード%sを実行しようとしています\ n"、copyinstr(arg0));
}
読み込み中-ファイル(ファイル名)
Perlが「use」、「require」、または「require」のいずれからでも、個々のファイルをロードしようとしているときに発生します
"行う"。 このプローブは、ファイルがディスクから読み取られる前に起動します。 ファイル名の引数は
「Module :: Name」スタイルの名前を提供する代わりに、ローカルファイルシステムパスに変換されます。
:* perl *:loading-file {
printf( "%sをロードしようとしています\ n"、copyinstr(arg0));
}
ロードされたファイル(ファイル名)
Perlが「使用」からかどうかにかかわらず、個々のファイルを正常にロードしたときに発生します。
「必要」または「実行」。 このプローブは、ファイルがディスクとその内容から読み取られた後に起動します
評価されました。 filename引数は、ではなくローカルファイルシステムパスに変換されます
「Module :: Name」スタイルの名前を提供します。
:* perl *:loaded-file {
printf( "正常にロードされた%s \ n"、copyinstr(arg0));
}
例
最も頻繁に呼び出される関数
#dtrace -qZn 'サブエントリ{@ [strjoin(strjoin(copyinstr(arg3)、 "::")、copyinstr(arg0))] = count()} END {trunc(@、10)}'
クラス:: MOP ::属性::スロット400
試してみてください:: Tiny :: catch 411
Try :: Tiny :: try 411
Class :: MOP :: Instance :: inline_slot_access 451
Class :: MOP :: Class :: Immutable :: Trait ::: around 472
Class :: MOP :: Mixin :: AttributeCore :: has_initializer 496
Class :: MOP :: Method :: Wrapped :: __ ANON__ 544
Class :: MOP :: Package :: _ package_stash 737
Class :: MOP :: Class :: initialize 1128
Class :: MOP :: get_metaclass_by_name 1204
関数呼び出しをトレースする
#dtrace -qFZn 'サブエントリ、サブリターン{trace(copyinstr(arg0))}'
0-> Perl_pp_entersub BEGIN
0 <-Perl_pp_leavesub BEGIN
0-> Perl_pp_entersub BEGIN
0-> Perl_pp_entersub import
0 <-Perl_pp_leavesub import
0 <-Perl_pp_leavesub BEGIN
0-> Perl_pp_entersub BEGIN
0-> Perl_pp_entersubドレス
0 <-Perl_pp_leavesubドレス
0-> Perl_pp_entersubダーティ
0 <-Perl_pp_leavesubダーティ
0-> Perl_pp_entersub whiten
0 <-Perl_pp_leavesub whiten
0 <-Perl_dounwind BEGIN
インタプリタのクリーンアップ中の関数呼び出し
#dtrace -Zn '相変化/ copyinstr(arg0)== "END" / {自己->終了= 1}サブエントリ/自己->終了/ {trace(copyinstr(arg0))}'
CPU ID機能:名前
1 77214 Perl_pp_entersub:sub-entry END
1 77214 Perl_pp_entersub:sub-entry END
1 77214 Perl_pp_entersub:sub-entryのクリーンアップ
1 77214 Perl_pp_entersub:sub-entry _force_writable
1 77214 Perl_pp_entersub:sub-entry _force_writable
コンパイル時のシステムコール
#dtrace -qZn '相変化/ copyinstr(arg0)== "START" / {自己>興味深い= 1}相変化/ copyinstr(arg0)== "RUN" / {自己>興味深い= 0} syscall ::: / self-> Interesting / {@ [probefunc] = count()} END {trunc(@、3)} '
イシーク 310
374を読む
統計64 1056
最も多くのオペコードを実行するPerl関数
#dtrace -qZn 'サブエントリ{self-> fqn = strjoin(copyinstr(arg3)、strjoin( "::"、copyinstr(arg0)))} op-entry / self-> fqn!= "" / {@ [self-> fqn] = count()} END {trunc(@、3)} '
警告:: unimport 4589
Exporter :: Heavy :: _ rebuild_cache 5039
Exporter :: import 14578
参考文献
DTraceダイナミックトレースガイド
<http://dtrace.org/guide/preface.html>
DTrace:Oracle Solaris、Mac OS X、およびFreeBSDでの動的トレース
<http://www.amazon.com/DTrace-Dynamic-Tracing-Solaris-FreeBSD/dp/0132091518/>
onworks.netサービスを使用してperldtraceをオンラインで使用する