使用 Eclipse 调试 JNI/C++ 库和进程

Using Eclipse to debug a JNI / C++ library and processes

本文关键字:进程 C++ Eclipse 调试 JNI 使用      更新时间:2023-10-16

我很难理解如何调试我的C++代码和相关的分叉Java进程。 我有C++代码可以分叉一个.jar的 SWING 文件。 这将打开一个 Java 窗口并等待用户输入...

我创建了一个C++ eclipse项目,它成功地编译了C++和Java源代码。 这两个编译都使用 -g 编译器标志。但是当我在调试模式下运行时,我只能单步执行初始C++代码。 在 fork 语句(启动 JAVA SWING 代码(之后,我无法逐步执行 Java 代码。下一步直接进入分叉的语句。 我正在使用 JNI 调用来调用在编译时创建的C++共享对象库。

我读过其他关于人们启动他们的 Java 应用程序然后通过 JNI 调用调用C++的文章。 但我正在做相反的事情。 我从我的C++代码开始,然后分叉一个 java 进程。

无论哪种方式,我似乎都需要以某种方式将我的分叉 Java 进程附加到当前C++ eclipse 调试会话。 我该怎么做呢? 一个简单的例子将不胜感激。

您必须使用用于 Java

调试的命令行选项在C++中创建 Java VM。要使用侦听器运行 Java 进行调试,请传递以下选项(如果端口 8000 不空闲,则可以选择其他地址(

-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n

然后在 Eclipse 调试对话框中创建一个"远程 Java 应用程序"。在"连接属性"的"端口"字段中使用选项中的地址(默认值为 8000(。在 Java 代码中设置一些断点,然后按"调试"。如果需要调试在 Java 启动时发生的代码,可以在选项中使用suspend=y,然后 VM 将在启动之前等待来自调试器的连接。

如果您无法更改 Java 进程的选项,那么您就不走运了。

编辑:文档 http://docs.oracle.com/javase/8/docs/technotes/tools/windows/java.html 告诉我-Xrun现在正在-agentlib。不知道,因为我多年来一直在使用上述选项,而且它们还没有停止工作。