调试java本机交互

调试java本机交互,java,debugging,profiling,native,Java,Debugging,Profiling,Native,我需要调试Java代码与某个本机dll的交互。我有一些在windbg+sosex中调试.NET本机交互的经验 然而,似乎不存在任何windbg扩展来显示Java调用堆栈 而且,我找不到jdk 6的任何调试版本 我并不急于从源代码编译jdk 6(即使我知道如何编译) 因此,我的问题是,您将如何调试或分析Java代码与一些本机DLL的交互?我已经使用jdb和windbg的组合完成了这项工作。在本机调用前后使用jdb在java中设置bp,并使用windbg在本机函数的开头设置bp。调试器既不知道另一个

我需要调试Java代码与某个本机dll的交互。我有一些在windbg+sosex中调试.NET本机交互的经验

然而,似乎不存在任何windbg扩展来显示Java调用堆栈

而且,我找不到jdk 6的任何调试版本

我并不急于从源代码编译jdk 6(即使我知道如何编译)


因此,我的问题是,您将如何调试或分析Java代码与一些本机DLL的交互?

我已经使用jdb和windbg的组合完成了这项工作。在本机调用前后使用jdb在java中设置bp,并使用windbg在本机函数的开头设置bp。调试器既不知道另一个也不需要知道。您将无法获得java字节码帧和本机帧的堆栈跟踪,但这没什么大不了的,因为您可以在本机调用之前和之后查看java堆栈


注意:jvm(至少是1.5版本)在正常情况下使用异常,这是在本机调试器下运行时的一大难题。幸运的是,它们的EIP基本上都是相同的,所以您可以使用类似的方式忽略:
。如果(@EIP==){gn}

,我已经使用jdb和windbg的组合完成了这项工作。在本机调用前后使用jdb在java中设置bp,并使用windbg在本机函数的开头设置bp。调试器既不知道另一个也不需要知道。您将无法获得java字节码帧和本机帧的堆栈跟踪,但这没什么大不了的,因为您可以在本机调用之前和之后查看java堆栈


注意:jvm(至少是1.5版本)在正常情况下使用异常,这是在本机调试器下运行时的一大难题。幸运的是,EIP对于所有的人来说都是一样的,所以你可以使用类似这样的东西来忽略:
。如果(@EIP==){gn}

这是一个起点,尽管这篇文章已经有3年了:你可能对jsadebugd()感兴趣jstack或VisualVMHere是一篇关于使用Netbeans和Visual Studio调试JNI应用程序的文章,发表于2012年5月:谢谢,我需要一些时间来消化所有这些。这篇文章已经有3年的历史了,但这里是一个起点:您可能对jsadebugd()感兴趣jstack或VisualVMHere是一篇关于使用Netbeans和Visual Studio调试JNI应用程序的文章,发表于2012年5月:谢谢,我需要一些时间来消化所有这些。谢谢,看起来是一个足够简单的组合。谢谢,看起来是一个足够简单的组合。