2012-11-07 92 views
0

我需要調試我們的Java代碼與某個本地dll的交互。我有一些在windbg + sosex中調試.NET本地交互的經驗。調試Java本地交互

然而,似乎沒有存在任何WinDbg的擴展,它會告訴我的Java調用堆棧。

而且,我找不到JDK 6

我不是不顧一切地從源代碼中(即使我知道如何)編譯JDK 6的任何調試版本。

所以,我的問題是你如何調試或配置文件與一些本地的DLL的Java代碼的互動?

+0

儘管這篇文章有3年的歷史,但這裏是一個開始的地方:https://www.ibm.com/developerworks/mydeveloperworks/ blogs/MatthewWhite/entry/debugging_integrated_java_and_c_c_code?lang = en –

+0

您可能對jsadebugd感興趣(http://docs.oracle.com/javase/7/docs/technotes/tools/share/jsadebugd.html) 和jstack http ://docs.oracle.com/javase/7/docs/technotes/tools/share/jstack.html或VisualVM的 –

+0

這裏是調試使用NetBeans和Visual Studio中的JNI應用的文章在2012年5月掛上:HTTP: //www.codeproject.com/Articles/69965/Debugging-a-JNI-Application-using-Netbeans-and-Vis –

回答

0

我用加多寶和WinDbg的組合做到了這一點。在你的本地調用之前和之後用jdb設置java中的bp,然後用windbg在本地函數的開頭設置一個bp。調試者不知道其他人,也不需要。您將無法獲得具有java字節碼框架和本機框架的堆棧跟蹤,但這沒什麼大不了的,因爲您可以在本地調用之前和之後查看Java堆棧。

注:JVM(至少1.5版本)使用正常情況下使用本地調試器下運行時,這是一個巨大的痛苦異常。幸運的是,EIP大部分都是相同的,所以你可以忽略使用類似的東西:.if (@eip == <addr>) {gn}

+0

謝謝,看起來像一個簡單的組合。 – mark