同时调试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的主要内容,如果未能解决你的问题,请参考以下文章

C++javapython的一些区别

为大数据软件准备JAVAPython环境

10分钟了解代码命名规范(JavaPython)

同时调试python和Java

牛逼!用 AI 实现 C++JavaPython 代码互译!

C+JavaPython选择哪个编程语言?