我遇到的问题与我之前提出的问题类似 here .
这次我想使用c/c++编写的程序来跟踪JAVA程序的执行。因此,正如我之前所说,跟踪 c/c++ 的标准输出打印和注册系统调用 4 的相同代码尚未为 JAVA 完成。我认为这是因为我跟踪的 execlp 仅用于运行 jvm。后来创建了更多进程(通过 jvm 的内部机制),我没有跟踪这些进程。我找到了这个topic这似乎是部分解决方案。如果我做对了,每个 child 都会被追踪到。但这也是一个问题,我只想跟踪处理我的应用程序的进程,而不是 jvm 可能创建的所有其他进程。是否有机会了解哪个 jvm 线程/进程处理我的程序并仅跟踪它?
为了让事情变得更容易,我们假设我的 JAVA 程序是单线程的。
最佳答案
如果您通过跟踪器应用程序启动二进制文件,则所有线程都将被跟踪。
但是如果您附加到一个进程,那么您将不会附加到它的所有线程。您必须使用 threadid 附加到其所有线程,您可以找到列出的例如。在/proc/%d/task/中。
另外,我建议阅读 strace 的源代码,我从中学到了很多东西。如果你可以使用 strace 成功跟踪你想要的 java 线程,你就可以从中获取逻辑。
关于java - 使用 C/C++ 的 ptrace Java 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17758784/