問題タブ [dtrace]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - Linux の dtrace は、プログラムの終了時に常にユーザーランド プローブを削除するとは限りません -- なぜですか?
(私がどのように dtrace をインストールしたかを知りたい場合は、この投稿の最後を参照してください。ここでは、既にインストールされているものと仮定します)
次の手順に従って、まったく問題のないカスタム プローブを作成しました。
A. _ プローブ定義で thing.d を作成します
B.シンプルな main.cpp を作成する
C. main.cpp をコンパイルします (ただし、リンクはしません)。_DTRACE_VERSION を定義する方法に注意してください。そうしないと、thing.h でプローブがコメントアウトされます。
D.プローブ オブジェクト ファイルを作成します (このファイルの一部として main.o を含める必要があることに注意してください)。
E.すべてをリンクする
問題は次のとおりです。アプリを実行し、CTRL-C で終了します (明らかに、無限ループのため、アプリは自動的に停止しません...)。
実際、これを数回行います。
次に、スーパーユーザー端末から:
こいつらはぶらぶらしてるだけだ...まるで登録解除などされていないようだ。「ps」を実行して、これらの pid (28217、28403、28636) を持つ proc があるかどうかを確認しましたが、何もありません。
興味深いことに、main.cpp から無限ループ (sleep() ループ) を削除し、アプリをすぐに終了させると、プローブが適切に削除されます。この問題は、sleep() 内で検出された CTRL-C に関係しているようです。おそらく、ある種の atexit() ハンドラが呼び出されていませんか?
これが私のシステム情報です:
DTRACE のインストール
Ubuntu に付属しているデフォルトの dtrace は使用していませんが、次のようにインストールした dtrace4linux を使用しています。
注: Paul Fox のサイトの最新バージョンを使用しています。
xcode - XCode でカスタム Instrument を作成するためのチュートリアル
XCode で独自のカスタム Instrument を作成したいと考えています。残念ながら、チュートリアルが見つからないようです。私が見つけた唯一の助けはマニュアルであり、私の意見では自己完結型ではありません。チュートリアルを知っている人はいますか?実際、1 つのカスタム インストゥルメント (ビルトインの 1 つでも) を調べることができれば、私はすでに満足しています。
関連がある場合は、JAVA 用の時間/CPU プロファイラーを作成する予定です。
kernel - dtrace: write sys コールをキャッチしません
私は dtrace を初めて使用し、基本的な dtrace スクリプトを作成しようとしています。次のように、別の端末で read(2) および write(2) システムコールをキャッチする例を見つけました。
指定された pid 番号は、他の端末の pid id からのものです。この例を見たとき、このスクリプトを dtrace で実行すると、読み取りと書き込みの syscall が表示されるはずでした。しかし、私は read syscall だけを観察しましたが、write syscall は観察しませんでした。
したがって、私が正しく理解している場合、私が観察した端末(pid 4217)で、その端末で何かを入力すると、カーネルはその文字を読み取るため、syscall が発生したと想定されます。「ls」のようなものを入力してEnterキーを押すと、カーネルがそれを読み取って実行し、出力を端末に書き込むため、write syscallが呼び出されると想定されます。しかし、どういうわけか書き込みシステムコールが表示されません。何故ですか?
linux - Dtrace 無効なプローブ指定子エラー
Ubuntu 11.04 に Dtrace をインストールしました。
私は実行できました:
と:
適切にコマンドを実行し、結果を取得しました。
しかし、私が実行しようとしたとき:
次のようなエラーが表示されます。
dtrace
: 無効なプローブ指定子proc:::exec-success
{ trace(curpsinfo->pr_psargs); }: プローブの説明proc:::exec-success
が一致するプローブがありません。
ここで何が問題なのですか?どうすればこれを修正できますか?
objective-c - DTrace 出力に Objective-C クラスを表示
次の DTrace スクリプトを使用すると、目的に近い出力を得ることができます。
呼び出されたクラスを出力に含めたいので、次のようにします。
classX
正しいクラスはどこですか。
出力は引き続きインデントされ、Objective-C メッセージのみが含まれ、C 関数呼び出しは含まれません。
node.js - Dtrace を使用した Node.js プロファイリングで関数名が表示されない
DTrace を使用してプロジェクトの CPU 使用率をプロファイリングしようとしています。スクリプトに従っただけです
問題は、関数名が表示されないことです。ファイルは次のstacks.out
ようになります。
フレーム グラフは、実際の関数名ではなく関数呼び出しとして 16 進数 (つまり、「0x82474d1b」) を示します。
私は OmniOS (illumos ベースの OS) vagrant ボックスr151002を使用しており、これ ( https://gist.github.com/dalssoft/5595688 ) を実行して、OmniOS で node.js 32 ビットをビルドしました。
何かご意見は?
ruby - Ruby 2.0 の新しい Tracepoint API は、dtrace が使用するのと同じプローブを使用しますか?
私は Dtrace と Ruby の使用について少し時間をかけて学びました..その後、2.0 の Ruby コアで新しい TracePoint クラスを見つけました。TracePoint は、dtrace が Ruby の実行を監視するために使用するのと同じプローブを内部で使用しますか?