java - 将调试器附加到 JNI_CreateJavaVM 创建的 JVM

标签 java java-native-interface jdb jnienv

这是在 Ubuntu 12.04/Java 7,64 位上

致力于为 WebkitGtk 版本 2 创建 java 绑定(bind)的项目。我对 WebkitGTK 的主要兴趣是 DOM 访问和操作,而不是仅仅显示网页。对于 V2,WebkitGtk 团队更改了架构,允许通过扩展访问 DOM。扩展由 WebKitWebProcess 加载,这是一个在 webkit 启动时触发的单独进程。

我已经控制了大部分。我的扩展正在加载,JVM 已启动,我的 Java 类正在加载并且大部分都按预期工作。现在我的调试技术基本上是 println 语句和/或日志语句。

想知道我是否可以附加一个 java 调试器,以便我可以更轻松地调试 java 代码。如果我运行 jps 命令,WebKitWebProcess 的 PID 会显示出来。所以有人知道这个进程有JVM。首选调试器将是 eclipse。

基本上它归结为如何在使用 JNI_CreateJavaVM 启动 VM 且进程已在运行的情况下附加 Java 调试器。

最佳答案

原来很简单。创建 VM 时,只需按如下方式传递调试器选项。将调试器连接到端口 9836 并且您在调试器中。

JavaVMOption options[3];
options[0].optionString = <your classpath>;
options[1].optionString = "-Xdebug";
options[2].optionString = "-agentlib:jdwp=transport=dt_socket,server=y,address=9836,suspend=n";  

关于java - 将调试器附加到 JNI_CreateJavaVM 创建的 JVM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20986051/

相关文章:

java - 从 Camera API 函数 takePicture() 获取/转换为 YCbCr_420_SP (NV21) 图像格式

java - Mac OS HSDB HotSpot 调试器无法附加到进程

java - 是否可以使特定方法仅适用于特定构造函数?

java - 在 PySpark 中运行自定义 Java 类

java - 约翰逊特罗特算法

java - 从 HTML 页面中提取段落

java - 为什么 JNIOnLoad 没有运行?

java - 子类的 JNI FindClass 格式?

java - 跨大陆远程Java调试

java - eclipse 用于在其 Debug模式下启动 java 进程的默认属性是什么?