7

我有一个像这样运行的 Groovy 脚本:

File scriptFile = ...;
ScriptEngine engine = ...;
String script = FileUtils.readFileToString(scriptFile);
Object evalResult = engine.eval(script, bindings);

不出所料,脚本文件中设置的断点不会触发。我可以改变什么来使它工作?该脚本需要在较大程序的上下文中运行(没有单独的启动配置),并通过 a ScriptEngine,并且该文件仅在运行时才知道。

4

2 回答 2

4

我正在使用这个 hack:我定义了一个 Java 类Debugger,它看起来像这样:

public class Debugger {

    private static final Logger log = LoggerFactory.getLogger( Debugger.class );

    /**
     * Invoke this method anywhere to end up in the Java debugger.
     * 
     * <p>Sometimes, you have code that might eventually be executed or you have a place
     * where you want to stop but no code line.
     * 
     * <p>In these case, use this method.
     * 
     * <p>Don't forget to set a breakpoint, first :-)
     * */
    public static void stopInDebugger() {
        log.error( "Please set a breakpoint in Debugger.stopInDebugger() and try again whatever you just did!" );
    }
}

log.error在 Ecipse 的行中有一个断点。

现在,我可以将此行放入需要断点的脚本中:

Debugger.stopInDebugger();

当然,它不允许我轻松地单步执行脚本,但总比没有好。

于 2014-05-07T07:41:12.263 回答
1

您的脚本文件是否在类路径的源文件夹中(听起来不是)?如果没有,那就这样吧。您还可以更改您的首选项以确保脚本文件永远不会被编译器编译(并且可选地甚至不复制到输出文件夹)。转到 Preferences -> Groovy -> Compiler 并查看脚本文件夹以实现此目的。

于 2012-08-02T16:39:56.667 回答