从java java-> jni.dll - > app.dll - > app.dll调试dll

5 java dll java-native-interface

如何调试java应用程序未加载的DLL.

场景是这样的:我的java应用程序正在加载正在使用另一个dll的jni.dll,而dll正在使用另一个dll.

的java < - > jni.dll < - > DLL < - > DLL

我有所有模块的源代码

我在调试jni.dll时使用visual studio express但是我该怎么做才能调试其他dll?

Mar*_*erg 8

但这是一样的.

我这样做,所以让我解释一下我的工作集.

我正在使用eclipse 3.1和Visual C++ 2003 7.1.3088(德语......抱歉;))和Windows XP.我在java中加载some_jni.dll和some.dll并使用jni类.some.dll加载internaly other.dll.我可以在visual studio中调试some.dll和other.dll.

启动应用程序并在第一个jni类调用中添加断点.打开VS并转到(德语)"Debuggen"(调试) - >"Prozesse"(进程)他们你会看到javaw.exe

选择javaw.exe,然后按"Anfügen"(附加).

当我想到的时候,c ++中的代码页必须在VS中打开断点.当断点被自动命中时,VS将不会打开页面.当加载dll并执行放置断点的代码行时,VS中的调试器将停在此位置.注意:只有在使用调试选项编译要调试的DLL时才会发生这种情况!否则调试器不会停在C++断点处.

我半年前做过这个,但这应该是正确的步骤.

希望你明白.


Mar*_*wie 0

自从我上次这样做以来已经有很长一段时间了,即使那时它也是在 Linux 和 Solaris 上进行的。一个不完整的解决方案是在 DLL 中使用“ _asm int 3;”嵌入“硬编码断点”

每当 Windows 执行此指令时,桌面用户就有机会将适当配置的调试器附加到受影响的进程。

它不像将调试器指向已知的进程 ID 那样顺利,但它应该可以让您继续前进。

M。