在 OS X Lion 的命令行中使用 OpenJDK 7,由于 JNI 本机代码,我如何使用它jdb
来调试需要在 32 位 JVM 下执行的应用程序?
我知道我可以调用java
asjava -d32
并且它将使用 32 位 JVM。我也可以将该-d32
标志传递给jdb
没有错误,但它似乎没有任何效果:当应用程序尝试链接其本机代码时,我仍然收到相同的错误消息。通过-J-d32
表现出相同的行为。
在 OS X Lion 的命令行中使用 OpenJDK 7,由于 JNI 本机代码,我如何使用它jdb
来调试需要在 32 位 JVM 下执行的应用程序?
我知道我可以调用java
asjava -d32
并且它将使用 32 位 JVM。我也可以将该-d32
标志传递给jdb
没有错误,但它似乎没有任何效果:当应用程序尝试链接其本机代码时,我仍然收到相同的错误消息。通过-J-d32
表现出相同的行为。
可以通过从两个不同的终端窗口启动java
并作为单独的进程来实现上述目标。jdb
所以执行这些命令,每个命令都在自己的窗口中:
java -d32 -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=127.0.0.1:5463 -classpath . MainClass
jdb -attach 127.0.0.1:5463
第一个将为应用程序启动 JVM,但在创建后立即挂起它。第二个将启动调试器并将其附加到刚刚创建的 JVM。然后您可以run
在第二个窗口中键入以启动应用程序。作为额外的好处,应用程序和调试器的输出不会混合在一起,因为它们都有自己的窗口。
参考:帮助jdb
列出了可能的命令行参数,JPDA有一个关于传输的部分。
尽管以上内容对我有用,但我欢迎提供更简单解决方案的其他答案,最好作为单个命令和/或无需以任意方式选择端口号。共享内存连接器似乎不适用于我的 JVM。