java - 使用 C/C++ 的 ptrace Java 程序

标签 java c linux system-calls ptrace

我遇到的问题与我之前提出的问题类似 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/

相关文章:

java - 如何让 JavaCritical 真正在 JNI 上工作

java - 为什么可以使用反射将 Double 添加到整数列表中

java - Android Studio Facebook SDK登录失败

linux - 如何删除子目录中的波浪形文件夹

python - 使用 pexpect 时如何明确设置终端大小

java - 如何删除parse.com类中数组类型对象中的值

c - C语言中如何获取从缓存中读取的字节数

c++ - 如何解释 int 中分配的 float 内存来模拟乘法?

mysql - C API 用于连接 C & SQL 数据库

linux - 为什么我的 Linux 提示只显示 ">"符号?