我需要调试 Java 代码与某个 native dll 的交互。我有一些在 Windbg + sosex 中调试 .NET 原生交互的经验。
但是,似乎不存在任何可以向我显示 Java 调用堆栈的 Windbg 扩展。
此外,我找不到 jdk 6 的任何调试版本。
我并不是那么迫切希望从源代码编译jdk 6(即使我知道如何编译)。
所以,我的问题是如何调试或分析 Java 代码与某些 native DLL 的交互?
最佳答案
我使用 jdb 和 Windbg 的组合来完成此操作。在 native 调用之前和之后使用 jdb 在 java 中设置 bp,并使用 Windbg 在 native 函数的开头设置 bp。两个调试器都不知道对方,也不需要知道对方。您将无法同时获得 Java 字节码帧和 native 帧的堆栈跟踪,但这没什么大不了的,因为您可以在 native 调用之前和之后查看 Java 堆栈。
注意:jvm(至少 1.5 版本)在正常情况下使用异常,这在 native 调试器下运行时是一个巨大的痛苦。幸运的是,EIP 对于所有这些都基本相同,因此您可以忽略使用类似以下内容: .if (@eip == <addr>) {gn}
关于java - 调试 Java 原生交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13279144/