标签: dacapo

Windows批处理脚本:将所有输出重定向到文件

我正在运行各种Java基准测试,并希望存档结果.我像这样执行(dacapo)基准测试:

C:\VM\jre\bin\java  -jar C:\benchmarks\dacapo-9.12-bach.jar %arg1% > %time::=%
Run Code Online (Sandbox Code Playgroud)

我在一个参数中传递了基准类型,这就是%arg1%.

您可以看到我将输出重定向到文本文件.不幸的是,输出的第一行和最后一行仍然在控制台中打印,而不是打印在文本文件中:

===== DaCapo 9.12 luindex starting =====
===== DaCapo 9.12 luindex PASSED in 2000 msec =====
Run Code Online (Sandbox Code Playgroud)

特别是最后一行在文本文件中很重要:)

是否有强制这种行为的技巧?

windows batch-file dacapo

30
推荐指数
2
解决办法
3万
查看次数

使用 BCEL 在现有方法中注入代码

对于我的论文研究,我需要将一段代码注入我没有源的测试套件中的可定义方法(在本例中为 DaCapo 基准套件,http: //dacapobench.org/ )。我论文的这一部分所基于的先前研究为此使用了字节码注入,这使我也这样做了。

我使用 Apache 的 BCEL 库 ( http://commons.apache.org/proper/commons-bcel/ ) 构建了一个小程序,该程序使我能够在其他语句之前将斐波那契算法注入到方法体中。

现在,我已经做了这个,但它不能正常工作。我注入的一些方法工作正常(因为它们因为斐波那契代码而变慢),并且运行 DaCapo 框架效果很好,而其他注入的方法会破坏代码。

问题是,我不知道为什么,即使我知道哪些方法失败了,哪些方法成功了,我也无法在损坏的方法中找到重复出现的模式。

  • 字节码似乎很好,到目前为止我可以看到,但我离专家还很远。当我比较注入前后的字节码时,我看到斐波那契算法后跟剩余的方法,只有增加的堆栈位置不同(因为注入的代码也使用堆栈空间)。
  • 成功的方法包含公共方法和私有方法。带参数和不带参数。
  • 一些失败的方法包含异常,其他的则没有。有些人在其中尝试过捕获,其他人则没有。等等等等

我可以粘贴一些失败的方法,但这会使这篇文章比现在更长。所以我想知道,有什么我没有考虑或忽略的事情吗?

您将在下面找到一个示例 java 文件、它的结果和我编写的 BCEL 程序。

一个简单的例子,我有一个名为 DemoClass.java 的 java 文件:

public class DemoClass {

    public static void main(String[] argv) {
        System.out.println("Demo body");
        test();
    }

    public static void test() {
        System.out.println("Demo test");
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的 shell 中调用以下 java 命令后:

javac DemoClass.java; java -cp bcel-5.2.jar:. InjectCodeBCEL DemoClass test 123456789 ; java DemoClass

(bcel-5.2.jar文件可以在前面提到的apache网站上找到)

该程序将如下所示:

public class DemoClass {

    public …
Run Code Online (Sandbox Code Playgroud)

java bytecode bcel bytecode-manipulation dacapo

5
推荐指数
1
解决办法
4319
查看次数