同时调试python和Java
Posted
技术标签:
【中文标题】同时调试python和Java【英文标题】:Debug python and Java at the same time 【发布时间】:2012-09-11 17:05:45 【问题描述】:我正在使用 Python 来调用我的许多 Java 程序。是否可以对 Python 和 Java 使用调试透视图并同时跟踪两种语言的进度?谢谢
【问题讨论】:
你有什么环境,用什么工具调试? 可能使用两个不同的 Eclipse 实例(或 Eclipse 和 Netbeans),并配置了 Java 进行远程调试? @Raffaele 您不会遇到运行程序的不同实例的问题吗?据我所知,如果您尝试在不同的 IDE 中进行调试(比如一个 IDE 从 java 调用一个对象,该对象不会被传送到另一个 IDE,因为它们都是不同内存缓冲区上的不同进程)据我所知 netbeans 和 eclipse彼此不是原子的。 @Raffaele atomicity 表示all or nothing
并发或An atomic operation is an operation which is performed as a single unit of work without the possibility of interference from other operations.
(它与事物如何相互同步有关)
@Killrawr 我知道 原子操作 是什么,只是不明白您所说的“Netbeans 和 Eclipse 彼此之间不是原子的”是什么意思>" - 顺便说一句,我发布了一个我的概念的工作示例
【参考方案1】:
我正在使用 Python 来调用我的许多 Java 程序。 是否可以同时对 Python 和 Java 使用调试透视图并跟踪两种语言的进度?谢谢
我不知道 (SO: CBT and Java on Eclipse Debug)。您可以尝试其他调试方法,例如使用 log4j 记录事件(针对您的 java 异常等),或者使用 junit 和 pyunit 构建一个 ant script 单元测试技术,并以良好的 coverage 为目标.
试试这个网站Testing Java with Jython and PyUnit,我想这就是你所追求的。
由 Erich Gamma 和 Kent Beck 编写的单元测试框架 JUnit 并不是 Java 环境中单元测试的唯一替代方案。 本文提供了如何使用 Jython、PyUnit 和 Ant 对 Java 项目进行单元测试的简单演示。 为了提供更好的比较元素,提供的示例与JUnit 发行版中可用的一种:MoneyTest。
本文假定读者具备单元测试、Java、Jython 或 Python 以及可能的 Apache Ant 的一些基本知识。有关每种技术的更多信息,请参阅本文末尾的参考资料部分。 (布尔戈,2012)
祝你好运!
【讨论】:
【参考方案2】:我下载了两个不同的 Eclipse,一个用于 JavaSE,一个用于 PyDev。 Python 脚本以远程调试模式启动 JVM,然后另一个 Eclipse 实例通过远程调试连接到该 JVM。这样,即使在两个不同的 IDE 中,您也可以调试 Python 和 Java 代码(我不知道这是否可以在同一个实例中完成,即两个调试会话是否可以存在于同一个 Eclipse 实例中,但是我不在乎,因为我为 Python、Java、Scala、android 使用不同的 Eclipse 实例...)
创建以下 Java 程序并导出一个可运行的 JAR,例如在位置 /home/raffaele/hello.jar
,并在 System.out.println()
所在行设置断点
public class HelloWorld
public static void main(String[] args)
for (int i = 0; i < 10; i++)
System.out.println(i);
创建一个 Python 脚本,在 print i
行添加一个断点,然后点击 Debug as Python script。子进程输出应该被重定向到 Eclipse 控制台,您应该看到消息 Listening for transport dt_socket at address: 8000
import subprocess
subprocess.call(["java", "-jar", "-Xdebug",
"-Xrunjdwp:transport=dt_socket,address=8000,server=y",
"/home/raffaele/hello.jar"])
for i in range(1, 10):
print i
此时,在JavaSE Eclipse实例中,创建一个Remote Debug配置:Run > Debug Configuration,在左侧栏选择Remote Java Application 并在右边选择一个名称,主机localhost
,传输socket
端口8000
。点击应用,然后点击调试。 JavaSE 实例中的 Debug 透视图将打开,您将看到您的代码在 System.out.println
处暂停。在右侧窗格中,您可以检查局部变量,例如 i = 0
。点击Resume 10 次,PyDev 实例会闪烁,因为 Python 断点已被命中。
【讨论】:
以上是关于同时调试python和Java的主要内容,如果未能解决你的问题,请参考以下文章