如何在 Delphi 中调试从 Java 调用的 DLL?
Posted
技术标签:
【中文标题】如何在 Delphi 中调试从 Java 调用的 DLL?【英文标题】:How to debug a DLL called from Java in Delphi? 【发布时间】:2009-11-08 11:20:55 【问题描述】:我使用 Delphi 编写了一个 DLL,它可以通过 JNA (Java Native Access) 从 Java 中调用。此 DLL 中的方法只是简单的操作,但为了将来使用和更复杂的调用,如果直接从 Java(或从 Java IDE)调用 DLL,我想知道如何使用 Delphi 调试器。
【问题讨论】:
要调试 DLL,您必须指定主机应用程序(如消息所示)。您可以通过菜单:“开始” - “参数”。 【参考方案1】:我相信这个问题的答案与 Stack Overflow 问题的答案相同How to debug a DLL file in Delphi。
事实上,既然你是在 Delphi 环境中调试 Delphi 的 DLL 文件,那么谁在调用堆栈的上层并不重要。
【讨论】:
【参考方案2】:如果我定义主机应用程序 (Java) 并设置正确的参数,它会起作用:
主机应用程序:C:\Programme\Java\jdk1.6.0_14\jre\bin\java.exe 参数:-cp "/path/to/test.jar" junit.textui.TestRunner AppTest此处解释了 JUnit 文本 TestRunner 命令行参数: http://junit.sourceforge.net/junit3.8.1/javadoc/junit/textui/TestRunner.html
【讨论】:
【参考方案3】:为什么不先在 Delphi 中调试 DLL? Delphi 有一个名为DUnit 的单元测试框架。您仍然希望为整个系统编写集成测试,但您可以在 JUnit 单元测试中模拟外部依赖项。
【讨论】:
古老的谚语说“吃的就是证明布丁”——通过从 Java 调用 DLL 可以分析错误,例如错误的数据类型、指针等。 DUnit 测试当然可以用作额外的安全网。 JUnit 测试会涵盖 DLL 的集成以及 Java 端的相关操作,如果这个集成测试失败,则需要分析数据流。 @mjustin:我完全同意您需要集成测试。除此之外,我所建议的只是单独测试这些类(单元测试)。你可以吃蛋糕也可以吃! :) 如果您要模拟外部依赖项(DLL),那么它就不再是一个很好的集成测试了。通过建议调试由 Java 调用的 not DLL,您基本上回答了如何调试由 Java 调用的 DLL 的问题。 @Rob:我已经说过两次了,这是对集成测试的补充。 OP询问有关调试DLL的问题。单元测试是减少代码错误的好方法。单元测试的核心原则是单独测试类(以及扩展的 DLL)。我希望我的集成测试能够正常工作——因为我已经通过单元测试消除了任何错误。见c2.com/cgi/wiki?UnitTestIsolation以上是关于如何在 Delphi 中调试从 Java 调用的 DLL?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Delphi 程序或编译器生成的调试信息中提取局部变量信息(地址和类型)?
如何有delphi5调用webservice,别人写的webservice?