快速上手
driver的启动
查看全部启动参数
使用 --help
(或者 -h
, -H
) 作为命令行参数启动driver可以获取启动参数说明:
gs.exe --help
常用的启动参数
下面将介绍一些常用的启动参数,更详细的启动参数见文末。
/r
设置根目录/e
启动脚本/eq
启动脚本,在脚本执行完成后退出/m
可以带多个预加载的脚本,如果有多个用逗号隔开(,
)--mount
挂载目录/D
预定义宏--require
||--require all
导入内置插件(用于兼容旧代码,详细说明见import
章节中的相关说明)/c1
开启命令行交互模式
其中/c1
常用于linux系统中,windows下是默认开启的。
下面给出一个例子更好的理解上述的其他参数,可以不用关注语法细节,使用的语法也非常简单,需要关注的是启动参数的使用方法。
目录结构如下:
sample-server
├─start_server.bat
├─server
| ├─preload.gsh
| └server.gs
├─etc
| └test.txt
├─bin
| └gs.exe
start-server.bat 内容如下
.\bin\gs.exe /r ./server/ /e /server.gs /m /preload.gsh --mount ./etc::/etc_m
可以看到这句批处理将根目录设置为./server/
, 后面/e
和 /m
都是相对于这个根目录来说,mount
是将当前目录下的etc
文件夹挂载到根目录下的etc。
preload.gsh 内容如下
write("load preload.gsh\n");
sever.gs 内容如下
write("sample server\n");
启动脚本后可以看到先输出了load preload.gsh
然后输出了sample server
, 也就是说预加载脚本和启动脚本都被执行了,且预加载脚本是在启动脚本之前执行的。
接下来我们来验证一下根目录是否被设置为./server以及etc是否有挂载在根目录下。
在控制台上敲一句'get_system_info()
,这里的'
用于控制台上的快捷打印,get_system_info()
可以返回driver现在的一些信息。查看输出中的root_path和mount_info即可。进一步验证etc是否成 功挂载成根目录下的etc_m可以在控制台上敲一下下面这句话。
'file.exist("/etc_m/test.txt")
现在我们已经对启动参数以及简单的项目结构有一个整体的认知了,并且能对shell进行操作,接下来看看shell上的常用方法吧。
shell常用方法
-
man 用于查看函数说明
比如想查看array相关的函数,这时可以在控制台敲man("array")
或者敲man array
, 两种写法是等价的(但在telnet时只能用前者)。可以看到函数的属性(包括定义在c++中还是定义在script中,是static函数还是member函数),参数列表以及描述。 -
cls
用于清空屏幕 -
。
||.
用于退出driver -
monkey.patch(program_name)
或monkey.patch("代码文件路径")
- 可以尝试通过
handle.get_all("program")
查询当前有哪些program - 然后通过
monkey.patch(program_name)
去热更新 update()
也可以用于热更新, 但是实现原理不太相同, update的逻辑更简单compile → destruct_object → load_static,但是对于有状态的对象,成员变量无法恢复,无法进行热更新。monkey.patch
更为通用。
- 可以尝试通过
-
find_object(handle|string name_or_id)
查找一个object -
get_obj_var(object ob, string var_name)
查看某个object的私有变量 -
set_obj_var(object ob, string var_name, mixed val)
设置某个私有变量的值 避免添加一个set函数->patch->删除这个set函数->patch这样的工作 -
child_objects(string | object name)
某个对象的所有实例 -
常规的输出操作为
write("xxxx")
或printf("xxxxx")
- 但是在shell中可以用'快捷打印'"xxx"
如何快速测试
在下一章中将会有很多需要测试的例子,快速测试并不需要写上面提到那种相对复杂的项目结构。下面介绍 常用的两种方法,以如下这个简单的目录结构为例
sample-helloworld
├─test.gs
├─gs.exe
一. 使用启动参数启动
启动语句
gs.exe /r ./ /e /test.gs
二. 使用load_static
启动参数什么也不写,把driver启动起来
在控制台上敲
load_static("/test.gs", this_domain())
全部启动参数简介
选项/配置 | 描述 |
---|---|
选项 | |
-c1 | 启用命令行。 |
-c2 | 启用命令行,并在启动完成前允许输入。 |
-d | 在指定端口启用调试器。 |
-e[q] | 设置虚拟机的启动脚本(如果设置了 'q' 则在完成后退出)。 |
-l | 设置日志文件名。 |
-o | 设置基础脚本(在启动脚本之前执行)。 |
-p | 设置 Telnet 端口。 |
-r | 设置虚拟机根目录。 |
-s | 设置默认线程池大小。 |
-sm | 设置 GC 静态工作线程数。 |
-w | 设置 Telnet 密码。 |
-wd | 设置工作目录。 |
-D | 声明一个定义。 |
-v |