問題タブ [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.
java - BTraceエージェントでアプリケーションを起動するときのNullPointerException
私はBTrace1.2を使用しており、BTraceWebサイトのユーザーガイドに従っています。コマンドを使用してプログラムを実行する際にBTraceを使用しても問題はありません。
しかし、次のいずれかを使用してBTraceエージェントでアプリケーションを開始しようとすると、次のようになります。
また
私はNullPointerException
乗るSimpleFileOutput
:
BTRACE_HOMEパスを構成しました。私はトリックを逃していますか?私もリリース1.1.3を使ってみましたが運がありませんでした。
助けてください。
編集コンソールへの出力を設定debug=false
して削除すると、正常に動作します。stdout=true
scriptOutputFile=out.trace
c - 自動化されたアセンブリ ループ レベルのプロファイリング
アセンブリ ループ レベルのプロファイラを知っている人はいますか?
私は gprof を使用してきましたが、gprof はループを非表示にし、関数レベルのプロファイリングですが、コードを最適化するには、何かをループ レベルに移動させたいと考えています。自動化して、gprof のような出力を提供したいだけです。dtrace に行くように勧められましたが、始めるべきかどうかわかりません。とにかく誰かが私を導くことができますか?例えば
たとえば、gprof では、main が 1 回実行され、foo が 100 回実行されたということになります。それでも、L2 または L3 が 1M 回実行された場合、最適化に集中できるかどうかを知りたいです。私の質問があいまいな場合は、さらに説明するように依頼してください ありがとう
c - このDTraceスクリプトを実行して、アプリケーションのプロファイルを作成するにはどうすればよいですか?
私は、組立ラインのプロファイリングを行うのに役立つ何かをオンラインで探していました。http://www.webservertalk.com/message897404.htmlで何かを検索して見つけました
この問題には2つの部分があります。特定のタイプ(inc、add、shlなど)のすべての命令を見つけてグループ化を決定し、次に実行されている命令を見つけて正しく合計します。逆アセンブラによるグループ化が十分でない限り、最初のビットは注意が必要です。どの命令が実行されているかを把握するために、Dtraceはもちろんここであなたの友達です(少なくともユーザーランドでは)。
これを行う最も良い方法は、各基本ブロックの始まりだけを計測することです。これらを見つけるのは今のところ手動のプロセスです...しかし、各命令をインストルメント化することは小さなアプリケーションで実行可能です。次に例を示します。
まず、テスト中の非常に些細なCプログラム:
さて、少しトリッキーなDスクリプト:
与えられた例から、これはまさに私が必要としているものです。ただし、それが何をしているのか、DTraceプログラムを保存する方法、結果を取得したいコードで実行する方法がわかりません。そこで、DTraceのバックグラウンドが良好な人がコードを理解し、保存して実行し、結果が表示されることを期待して、これを開きました。
java - OS X 上の Java DTrace ブリッジ
OS X の OS / カーネル レベルでファイル システム イベントを取得しようとしています。従わなければならない要件が 2 つあります。最初のものは、開発中のプロジェクト全体がJavaで書かれているため、Javaでこれを行うことです。2 つ目は、ドキュメントがいつ開かれたかを知る必要があることです。
Linux では inotify-java を使用しましたが、OS X では適切な同等のものを見つけることができません。また、JNA は有用なバインディングを提供しません。現在、lsof プログラムを頻繁に呼び出すことで、イベントのキャッチを回避しています。ただし、これは悪い解決策です。
助けてくれてありがとう。
java - Mac OS X で jinfo を介して DTrace プローブを有効にできない
Snow Leopard で Java 6 を実行しています。
jinfo ユーティリティを使用して、実行中の Java プロセスで ExtendedDTraceProbes をオンにできるはずです。私のコマンド プロンプトでも、jinfoは一般的なフラグを有効にすることについて話しています。
私が知る限り、DTrace フラグに特別な価値はありません。重要なのは、その有無だけです。
しかし、それを実行しようとすると、sudo で始まるかどうかに応じて、2 つのエラーのいずれかが発生します。
想定:
jps
StayRunning プロセスと同じユーザー:
jinfo -flag +ExtendedDTraceProbes 1234
root として試行:
sudo jinfo -flag +ExtendedDTraceProbes 1234
エラーは2 行目にあり、もちろんプロセスはまだ実行中です。
奇妙なことに、このページには OS X の「+」オプションは表示されませんが、私のマシンでは使用方法のメッセージが出力されます。
これが私の簡単なコードです。Eclipse でも同様に失敗します。
StayRunning.java
xcode - CFType オブジェクトの alloc、retain、release、および dealloc のメッセージをログに記録したり、実行を中断したりするにはどうすればよいですか?
CFType
特定のオブジェクト (現在の目的では a CGPDFDocument
) が割り当て、保持、解放、または割り当て解除されるたびに、メッセージをログに記録できるようにしたいと考えています (できればデバッガーにブレークします) 。
を取るCreate...()
メソッドがないため、次のようにデフォルトのアロケーターを一時的に変更しようとしています。CGPDFDocument
CFAllocatorRef
はMyLogAllocator()
次のように定義されます。
ただし、デフォルトのアロケーター (kCFAllocatorSystemDefault
私が知る限り) には context.retain と context.release に NULL があるようです。そのため、呼び出す元の実装はありません。そのため、上記のコードを試すと、次のスタック トレースが表示されます。
XCode は、停止している理由を実際には教えてくれませんが、続行しようとすると、次のようになります。
しかし、何回続けても同じ SIGTRAP が表示されます。解釈の仕方がわかりません。私が設定した唯一のブレークポイントは、上のシンボリック ブレークポイントですobjc_exception_throw
。
注意すべきことの 1 つは、LogRetain()
とLogAllocate()
がそれぞれ から 1 回 (この順序で) 正常に呼び出されることCFAllocatorCreate()
です。
そして、LogAllocate()
から再び成功しCFAllocatorAllocate()
ます:
_CFRuntimeCreateInstance()
at #2 が上記の問題を呼び出す前にCFRetain()
。
誰かがここで何が起こっているのかを理解するのを手伝ってくれませんか (特に、デフォルトのアロケーターが保持と解放を処理する方法と、SIGTRAP を取得する理由)。修正方法; そして、私がやろうとしていることを行うためのより良い方法があるかどうか?
(DTrace を使用して、 forでフィルター処理されたCFRetain()
とをプローブする方法を考え出すことができるかもしれないと考えましたが、割り当て解除のために何をプローブすればよいかわかりません (割り当ては 内で行われることがわかっているので、追跡することはそれほど重要ではありません)。また、retain / release / deallocate でデバッガーを中断できるようにしたいと考えていますが、これは DTrace では不可能だと思います。)CFRelease()
CFTypeID
CGPDFDocument
CGPDFDocumentCreateWithProvider()
更新:ソースコードを読んだので、 andCFRelease
の目的を誤解していることに気づきました。したがって、上記のアプローチ全体は初心者向けではありません。しかし、おそらく DTrace/Instruments ウィザードはまだ何らかの魔法を働かせることができるでしょうか?!context.retain
context.release
context.info
java - SolarisでJavaプログラムをテストおよびプロファイリングする価値のあるDTraceスクリプト
DTraceに興味をそそられることに気づきましたが、 DTraceを使用しないと他の方法では取得できない情報を取得できるユースケースを個人的に見ることができませんでした。
ですから、私が見落としていたものを聞きたいと思います。スタンドアロンアプリケーションとJavaEEWebアプリケーション(ほとんどがソケットを使用してレガシーバックエンドと大量に通信する)を作成するときに違いを生む可能性のあるDTraceを使用したvmware OpenIndianaビルド148で何ができますか?
重要なDtraceスクリプトは大歓迎です。
networking - Solarisスクリプト出力をネットワーク経由でWindowsクライアントにプッシュしますか?
いくつかのディスク統計を継続的に出力する単純なSolarisDTraceスクリプトがあります。デフォルトでは、出力はSTDOUTにチャックされるため、ファイルにリダイレクトしてデータをキャプチャできます。
私が探しているのは、そのデータをリモートで取得する機能です。私の最初の考えは、クライアントが接続してデータをストリーミングできるデーモンが必要だと思っていましたが、このジョブを実行するのに最適なソフトウェアスタック/ライブラリが何であるかはよくわかりません。
Solaris側のPerlとPythonの知識があり、C#.NETクライアントを使用します。クライアントビットは、リモートソケットに接続してデータが表示されるのを待つだけなので、問題にはなりません。ただし、もう少し検討が必要なのはサーバー部分です。
これについて行くための最良の方法に関するアイデア/提案はありますか?
c - ライブラリへのすべての呼び出しを一覧表示する
他のプログラムが使用する共有ライブラリを C で構築しています。共有ライブラリのエラーが原因で、これらの他のプログラムがクラッシュすることがあります。この種のバグを再現するとき、ライブラリのどの関数がどの引数でどのような順序で呼び出されているかを知ることは非常に役に立ちます。もちろんprintf()
、すべての関数に呼び出しを追加したり、それらすべてにブレークポイントを追加したりできますが、これを判断するにはもっと良い方法が必要だと思います。
編集:OSXでこれを行っているため、dtraceと関連スクリプトdapptraceが有望に思えます。ただし、いくつかのドキュメントを掘り下げた後、私はまだ少し迷っています。
たとえば、私のライブラリは/path/to/libmystuff.soで、このライブラリにリンクするプログラムテストがあります。dtraceを使用して、 libmystuff.soにあるすべての関数呼び出しのリストを表示するにはどうすればよいですか?
java - Java の DTrace は Windows などの Non Unix Like OS で使用できますか?
Java6 が提供する DTrace 機能を Windows で使用できますか?