0

ここで提示された以前の問題と同様の問題があります。

今回はc/c++で書かれたプログラムを使ってJAVAプログラムの実行を追跡したいと思います。したがって、前に述べたように、c/c++ の stdout 印刷を追跡し、syscall 4 を登録する同じコードは、JAVA では実行していません。私がトレースしたexeclpがjvmを実行するためだけに使用されているためだと思います。その後、追跡していないプロセスが (jvm の内部メカニズムによって) 作成されます。部分的な解決策と思われるこのトピックを見つけました。私が正しければ、すべての子供が追跡されます。しかし、それも問題であり、jvm が作成する他のすべてのプロセスではなく、アプリケーションを処理するプロセスのみを追跡したいと考えています。どのjvmスレッド/プロセスが私のプログラムを処理し、それのみを追跡するかを知る機会はありますか?

少し簡単にするために、私の Java プログラムが 1 スレッドであると仮定しましょう。

4

1 に答える 1

0

トレーサー アプリからバイナリを開始すると、すべてのスレッドがトレースされます。

ただし、プロセスにアタッチすると、すべてのスレッドにアタッチされるわけではありません。リストされているスレッドIDを使用して、すべてのスレッドにアタッチする必要があります。/proc/%d/タスク/にあります。

また、strace のソース コードを読むことをお勧めします。そこから多くのことを学びました。strace を使用して、必要に応じて Java スレッドを正常に追跡できる場合は、そこからロジックを取得できます。

于 2013-11-11T21:09:01.023 に答える