問題タブ [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 - ライブラリへのすべての呼び出しを一覧表示する
他のプログラムが使用する共有ライブラリを C で構築しています。共有ライブラリのエラーが原因で、これらの他のプログラムがクラッシュすることがあります。この種のバグを再現するとき、ライブラリのどの関数がどの引数でどのような順序で呼び出されているかを知ることは非常に役に立ちます。もちろんprintf()
、すべての関数に呼び出しを追加したり、それらすべてにブレークポイントを追加したりできますが、これを判断するにはもっと良い方法が必要だと思います。
編集:OSXでこれを行っているため、dtraceと関連スクリプトdapptraceが有望に思えます。ただし、いくつかのドキュメントを掘り下げた後、私はまだ少し迷っています。
たとえば、私のライブラリは/path/to/libmystuff.soで、このライブラリにリンクするプログラムテストがあります。dtraceを使用して、 libmystuff.soにあるすべての関数呼び出しのリストを表示するにはどうすればよいですか?
java - Java の DTrace は Windows などの Non Unix Like OS で使用できますか?
Java6 が提供する DTrace 機能を Windows で使用できますか?
macos - 有効になっているプローブを dtrace に問い合わせることはできますか?
問題があれば、私は Mac OS X を使用していますが、これはすべての OS に当てはまると思います。OSごとに答えが異なる場合は、それについても学びたいと思います。
ターミナル ウィンドウを開き、いくつかのプローブを有効にして、DTrace でデータの収集を開始するとします。
別のターミナル ウィンドウから、有効になっているプローブを DTrace に問い合わせることはできますか? もしそうなら、どのように?
macos - DTrace のカーネル変数について知る方法は?
OSによって答えが異なると思うので、Mac OS Xに関連する答えだけに興味があります。
たとえば、Apple はこのドキュメントでカーネル変数 avenrun について言及しています。他にもたくさんあることを知っており、次のようにすることで完全なリストを生成できると思います。
ただし、名前のリストを持っているだけでは、変数の構造や使用方法については何もわかりません。
私が疑問に思っていたのは、どのカーネル変数が利用可能で、どのように使用され、どのように使用されるかを学習する方法です。
objective-c - dtraceでobjcメソッドの結果を取得することは可能ですか?
objcメソッドが戻ったときに起動するアクションを作成しました(objc ::: return)。今のところ、戻り値を取得する必要があります。出来ますか?
objective-c - Mac OS X で DTrace を使用してシステム メソッドまたはシステム フレームワークを使用せずに検出するにはどうすればよいですか?
NSLock、NSThread、NSObject などのシステム クラスやメソッドを使用せずに、DTraceを使用してユーザー定義のクラスとメソッドを出力するにはどうすればよいですか?
次の D コードを使用して、システムおよびユーザー定義を含むすべての Objective-C メソッドをトレースできます。
optimization - DTrace を使用してコール スタック ツリー内の冗長な関数呼び出しを検出する
かなり複雑なアルゴリズム内で不要な冗長呼び出しを追跡するのに苦労しています。
(私の一部の) 私のアルゴリズムは、キャッシュされていない比較的高価な関数の (いくつかのサブルーチンでの) 冗長な呼び出しによって深刻に遅くなっているようです。これを確認するために、Dtrace を利用して、コール スタック ツリーの特定のブランチ内で単一の関数の複数の呼び出しを検出したいと思います。
dtrace に次のことを依頼できるようにしたいと思います。
特定の関数内のコール スタック ツリーを検索する (ここ
"foo();"
では、添付の画像を参照) 重複する関数呼び出し ("c();"
など)それぞれの呼び出し回数でログに記録します (ここでは 3x
"c();"
)
また、可能であれば
- 各発生のコール スタックをログに記録します (
"foo()/a()/c()"
、"foo()/a()/b()/c()"
、"foo()/a()/b()/d()/c()"
)。
これは可能ですか?はいの場合、どのように考えていますか?
前もって感謝します!
注: 私のコードは実際には Objective-C ですが、サンプル コードでは C を使用しましたが、この種のことは言語に依存しないはずです。少なくとも一般的なアプローチ/アイデア。
debugging - すべての関数呼び出しを追跡し、それらのパラメーターを出力する (ユーザー空間)
ユーザー空間の C99 プログラムで呼び出される関数とその順序を知りたいです。また、どのパラメータが与えられているか。
DTrace でこれを行うことはできますか?
プログラムの例
次のテキストファイルが表示されます。
ソースを変更したくありません。プログラムは非常に巨大で、9,000 個の関数があります。
私はすべての情報源を持っています。デバッグ情報をコンパイルしたプログラムがあり、gdb はバックトレースで関数パラメーターを出力できます。
タスクは DTrace で解決できますか?
私のOSは、BSD、Linux、MacOS、Solarisのいずれかです。私は Linux の方が好きですが、リストされている OS のどれでも使用できます。
macos - DTrace キーロガー
Brendan Gregg の sshkeysnoop.d を Mac OS X で動作させることができるかどうかを確認しようとしましたが、問題が発生しています。これを機能させることは可能ですか?もしそうなら、どのように?
私が得ているエラーは次のとおりです。
DTrace を使用して Mac OS X で他の種類のキー ロギングを行うことはできますか?
macos - OSXでD-traceを使用してコマンド引数を取得するにはどうすればよいですか
D-trace を使用して、引数を使用して実行コマンドをプレビューしようとしています。私はこのようなことを試しました:
ただし、OSX では、このコードは引数ではなくコマンド名のみを返します。
このフォーラムのスレッドを見つけましたが、最後の回答のコードが機能しません。