【问题标题】:Debug python and Java at the same time同时调试python和Java
【发布时间】: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 彼此之间不是原子的”是什么意思>" - 顺便说一句,我发布了一个我的概念的工作示例

标签: java python debugging


【解决方案1】:

我正在使用 Python 来调用我的许多 Java 程序。 是否可以同时对 Python 和 Java 使用调试透视图并跟踪两种语言的进度?​​谢谢

我不知道 (SO: CBT and Java on Eclipse Debug)。您可以尝试其他调试方法,例如使用 log4j 记录事件(针对您的 java 异常等),或者使用 junitpyunit 构建一个 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 断点已被命中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-05
      • 1970-01-01
      • 2015-11-13
      • 1970-01-01
      • 2010-09-16
      • 2011-01-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多