【问题标题】:Control the execution of a java program from my java program从我的 java 程序控制 java 程序的执行
【发布时间】:2012-09-04 04:43:42
【问题描述】:
public class LineNum1 extends Thread{

    public synchronized void run()
         {
          try {
                Hello.main(null);
                System.out.println("Stack Trace of thread"+ this.currentThread().getName());
                System.out.println(this.currentThread().getStackTrace()[1].getLineNumber());
                System.out.println("End of Stack Trace");
               } catch (Exception e1) {
                    e1.printStackTrace();
               }
            }

     public static void main(String[] args) {

                LineNum1 t = new LineNum1();
                t.start();
            }
   }

我正在开发一个代码覆盖工具。

使用上面的程序,我从这里执行 Hello.java。有什么方法可以让我控制 Hello.java 吗?

或者为了让我的生活更简单,我可以获取 Hello.java 的执行行(执行路径)的行号吗?

【问题讨论】:

  • 请对代码块使用一致且符合逻辑的缩进。
  • @你真的在写代码覆盖工具吗?请参阅 jacoco/emma/cobertura 等。所有这些仪器代码都有特定的指令,然后在运行时收集数据。你能解释一下你的方法吗?
  • 嗨 Jayan,我的方法是使用 this.currentThread().getStackTrace()[1].getLineNumber() 获取行号。我本可以检测我的代码,但我正在为其编写代码覆盖工具的应用程序(无法显示)需要执行的每一行。因此,我认为在每一行进行检测都会使执行速度变慢。所以请提出一种方法。谢谢。
  • @Daanish:但只要Hello 不友好地抛出异常,你就无法捕获异常。即使抛出异常:我看不到任何合理的方法可以从中获得类似覆盖。

标签: java code-coverage line-numbers


【解决方案1】:

您想使用 Java 调试接口。它是用于编写调试器等 Java 工具的 Java 库。它将允许您逐步完成程序,查询行号和诸如此类的东西。

有一个名为 trace 的简单演示应用程序,它可以完成您想要的大部分工作:http://docs.oracle.com/javase/1.5.0/docs/guide/jpda/trace.html

如果您有时间阅读它,这里有很多文档: http://docs.oracle.com/javase/1.5.0/docs/guide/jpda/index.html

【讨论】:

    【解决方案2】:

    您可能可以将第二个 Java 类作为 Process 执行并自己读取输出。

    【讨论】:

    • 即使没有Process我也可以读取输出。但我的要求是我是Hello.java的执行路径而不是输出。谢谢@asgs。
    • 执行路径是什么意思?我以为你想捕捉从另一个 java 进程抛出的异常堆栈跟踪。
    • 抱歉,我的问题可能不清楚。我想要 Hello.java 的执行路径。因此,我认为获取 StackTrace 是一种选择。我的主要需求是获取Hello.java的执行路径。谢谢。
    • 抱歉,您仍然没有回答执行路径的意思。你为什么不重写你的问题?在 cmets 部分讨论这个是不值得的。
    【解决方案3】:

    我还没有完全完成代码覆盖。但是我已经使用字节码检测来检测方法,因此我得到了我访问过的所有方法的日志。这个Javassist Turtorial 可能会对你有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-28
      • 2013-08-14
      • 2014-09-28
      • 2015-09-26
      • 2011-05-15
      • 2021-11-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多