0

我遇到的问题与我之前介绍的问题类似

这次我想使用用 c/c++ 编写的程序来跟踪 JAVA 程序的执行。因此,正如我之前所说,跟踪 c/c++ 的标准输出打印并注册系统调用 4 的相同代码还没有为 JAVA 完成。我认为这是因为我跟踪的 execlp 仅用于运行 jvm。后来创建了更多我不跟踪的进程(通过jvm的内部机制)。我发现这个话题似乎是部分解决方案。如果我做对了,每个孩子都会被追踪。但这也是一个问题,我只想跟踪处理我的应用程序的进程,而不是 jvm 可能创建的所有其他进程。有没有机会知道哪个 jvm 线程/进程处理我的程序并只跟踪它?

为了让它更容易一点,让我们假设我的 JAVA 程序是单线程的。

4

1 回答 1

0

如果您通过跟踪器应用程序启动二进制文件,则将跟踪所有线程。

但是,如果您附加到一个进程,那么您将不会附加到它的所有线程。您必须使用 threadids 附加到其所有线程,您可以找到例如列出的。在 /proc/%d/task/.

另外,我建议阅读 strace 的源代码,我从中学到了很多东西。如果您可以根据需要使用 strace 成功跟踪 java 线程,则可以从中获取逻辑。

于 2013-11-11T21:09:01.023 回答