首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从java java -> jni.dll ->app.dll -> app.dll调试dll

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

Stack Overflow用户
提问于 2008-12-11 16:02:53
回答 5查看 4.1K关注 0票数 5

如何调试未由java应用程序加载的dll。

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

java<->jni.dll<->dll<->dll

我有所有模块的源代码

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

EN

回答 5

Stack Overflow用户

发布于 2008-12-12 07:10:50

但这是一样的。

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

我正在使用eclipse 3.1和Visual C++ 2003 7.1.3088 (德语...对不起;) )和Windows XP。我使用jni类在java中加载some_jni.dll和some.dll。some.dll加载内部的other.dll。我可以在visual studio中调试some.dll和other.dll。

启动应用程序并为第一个jni类调用设置断点。打开VS并转到(德语) "Debuggen“(调试) -> "Prozesse”(进程),您将看到javaw.exe

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

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

我半年前就这样做了,但这应该是正确的步骤。

希望你能得到它。

票数 8
EN

Stack Overflow用户

发布于 2008-12-11 17:38:13

在visual studio中,您可以使调试器适应正在运行的java进程。当命中C++代码中的断点时,调试器将在visual studio中显示该断点,并将停止该进程。

目前,我还没有安装visual studio,但是在debug选项中有一个窗口,您可以在其中看到所有正在运行的进程。查找java进程并将该进程添加到调试会话中。

当dll执行放置断点的行时,您将看到它。

编辑:必须使用调试信息编译的dll,并且不能处于发布模式,否则visual studio中的调试器不会在断点处停止!

票数 1
EN

Stack Overflow用户

发布于 2008-12-11 16:22:49

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

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

这不像将调试器指向已知的进程ID那样流畅,但它应该可以让您继续工作。

M.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/359851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档