Java源码示例:org.luaj.vm2.lib.DebugLib

示例1
private static Globals getGlobals(Context context, XHook hook, Map<String, String> settings) {
    Globals globals = JsePlatform.standardGlobals();
    // base, bit32, coroutine, io, math, os, package, string, table, luajava

    if (BuildConfig.DEBUG)
        globals.load(new DebugLib());

    globals.set("log", new LuaLog(context.getPackageName(), context.getApplicationInfo().uid, hook.getId()));
    globals.set("hook", new LuaHook(context, settings));

    return new LuaLocals(globals);
}
 
示例2
static void runScriptInSandbox(String script) {
	
	// Each script will have it's own set of globals, which should
	// prevent leakage between scripts running on the same server.
	Globals user_globals = new Globals();
	user_globals.load(new JseBaseLib());
	user_globals.load(new PackageLib());
	user_globals.load(new Bit32Lib());
	user_globals.load(new TableLib());
	user_globals.load(new JseStringLib());
	user_globals.load(new JseMathLib());

	// This library is dangerous as it gives unfettered access to the
	// entire Java VM, so it's not suitable within this lightweight sandbox.
	// user_globals.load(new LuajavaLib());
	
	// Starting coroutines in scripts will result in threads that are
	// not under the server control, so this libary should probably remain out.
	// user_globals.load(new CoroutineLib());

	// These are probably unwise and unnecessary for scripts on servers,
	// although some date and time functions may be useful.
	// user_globals.load(new JseIoLib());
	// user_globals.load(new JseOsLib());

	// Loading and compiling scripts from within scripts may also be
	// prohibited, though in theory it should be fairly safe.
	// LoadState.install(user_globals);
	// LuaC.install(user_globals);

	// The debug library must be loaded for hook functions to work, which
	// allow us to limit scripts to run a certain number of instructions at a time.
	// However we don't wish to expose the library in the user globals,
	// so it is immediately removed from the user globals once created.
	user_globals.load(new DebugLib());
	LuaValue sethook = user_globals.get("debug").get("sethook");
	user_globals.set("debug", LuaValue.NIL);

	// Set up the script to run in its own lua thread, which allows us
	// to set a hook function that limits the script to a specific number of cycles.
	// Note that the environment is set to the user globals, even though the
	// compiling is done with the server globals.
	LuaValue chunk = server_globals.load(script, "main", user_globals);
	LuaThread thread = new LuaThread(user_globals, chunk);

	// Set the hook function to immediately throw an Error, which will not be
	// handled by any Lua code other than the coroutine.
	LuaValue hookfunc = new ZeroArgFunction() {
		public LuaValue call() {
			// A simple lua error may be caught by the script, but a
			// Java Error will pass through to top and stop the script.
			throw new Error("Script overran resource limits.");
		}
	};
	final int instruction_count = 20;
	sethook.invoke(LuaValue.varargsOf(new LuaValue[] { thread, hookfunc,
					LuaValue.EMPTYSTRING, LuaValue.valueOf(instruction_count) }));

	// When we resume the thread, it will run up to 'instruction_count' instructions
	// then call the hook function which will error out and stop the script.
	Varargs result = thread.resume(LuaValue.NIL);
	System.out.println("[["+script+"]] -> "+result);
}
 
示例3
/** Create standard globals including the {@link DebugLib} library.
 * 
 * @return Table of globals initialized with the standard JSE and debug libraries
 * @see #standardGlobals()
 * @see org.luaj.vm2.lib.jse.JsePlatform
 * @see org.luaj.vm2.lib.jme.JmePlatform
 * @see DebugLib
 */
public static Globals debugGlobals() {
	Globals globals = standardGlobals();
	globals.load(new DebugLib());
	return globals;
}
 
示例4
/**
 * Create standard globals including the {@link DebugLib} library.
 *
 * @return Table of globals initialized with the standard JSE and debug libraries
 * @see #standardGlobals()
 * @see org.luaj.vm2.lib.jse.JsePlatform
 * @see org.luaj.vm2.lib.jme.JmePlatform
 * @see DebugLib
 */
public static Globals debugGlobals() {
    Globals globals = standardGlobals();
    globals.load(new DebugLib());
    return globals;
}
 
示例5
/** Create standard globals including the {@link DebugLib} library.
 * 
 * @return Table of globals initialized with the standard JSE and debug libraries
 * @see #standardGlobals()
 * @see org.luaj.vm2.lib.jse.JsePlatform
 * @see org.luaj.vm2.lib.jme.JmePlatform
 * @see DebugLib
 */
public static Globals debugGlobals() {
	Globals globals = standardGlobals();
	globals.load(new DebugLib());
	return globals;
}
 
示例6
/** Create standard globals including the {@link DebugLib} library.
 * 
 * @return Table of globals initialized with the standard JSE and debug libraries
 * @see #standardGlobals()
 * @see org.luaj.vm2.lib.jse.JsePlatform
 * @see org.luaj.vm2.lib.jme.JmePlatform
 * @see DebugLib
 */
public static Globals debugGlobals() {
	Globals globals = standardGlobals();
	globals.load(new DebugLib());
	return globals;
}