help
call call address ...
clearcache clear lua code cache
cmem Show C memory info
debug debug address : debug a lua service
dumpheap dumpheap : dump heap profilling
exit exit address : kill a lua service
gc gc : force every lua service do garbage collect
help This help message
info info address : get service infomation
inject inject address luascript.lua
jmem Show jemalloc mem stats
kill kill address : kill service
killtask killtask address threadname : threadname listed by task
list List all the service
log launch a new lua service with log
logoff logoff address
logon logon address
mem mem : show memory status
netstat netstat : show netstat
ping ping address
profactive profactive [on|off] : active/deactive jemalloc heap profilling
service List unique service
signal signal address sig
snax lanuch a new snax service
start lanuch a new lua service
stat Dump all stats
task task address : show service task detail
trace trace address [proto] [on|off]
uniqtask task address : show service unique task detail
skynet.start(function()
skynet.dispatch("lua", function(session, address, cmd, ...)
cmd = cmd:upper()
if cmd == "PING" then
...
end
local f = command[cmd]
if f then
...
预读
2CZ2UA5u
环境测试搭建
使用示例代码见
examples/main.lua
。先开启进程:
从
examples/main.lua
中可以看到debug_console
开启的端口是8000
:现在我们使用
nc
或者telnet
命令连接这个端口就能进入调试控制台。这里推荐使用
rlwarp
命令包裹一下nc
命令,这样可以实现输入命令时使用ctrl + r
搜索历史输入的命令,使用ctrl + p
和ctrl + n
可以上下查看历史命令。当看到显示了
Welcome to skynet console
时,说明已经成功连上控制台了。查看服务列表
输入
list
命令,可以看到正在运行中的服务列表。如上所示,
:01000004
第一列冒号开头的是服务的地址,snlua cmaster
是服务启动参数。比如根据:0100000c snlua debug_console 8000
可以查到debug_console
服务的地址为:0100000c
。查看帮助
help
命令很有用的,有时候忘记命令的格式了,输入help
可以临时看看。call 命令的使用
call
命令是对skynet.call
接口的封装,执行效果和skynet.call
效果一样,一般用于手动执行服务里的某个函数,且该函数是command
里的接口。比如
simpledb
服务,代码位置:examples/simpledb.lua
,定义了GET
和SET
接口:接下来我们在 debug console 里执行
call
指令查看效果:首先是执行的
set
接口,命令格式为call 服务地址 "接口名", 参数1, 参数2
。其中服务地址就是list
命令显示出来的地址,接口名需要带引号,参数如果是字符串的时候,也需要有引号。然后执行的是
get
接口,返回的数据会输出到终端。可能已经发现了为什么定义的接口名是大写的,我们使用的时候却可以小写?这是因为
simpledb
对接口名做了处理,忽略大小写了。一般服务都没有处理这个的,所以需要注意保持相同的接口名。debug 命令
debug
命令就不多解释了,这篇 《在线调试 Lua 代码》 写很详细了,也给出了演示示例。inject 命令
前面看到
call
命令可以执行已经有实现好的外部接口,可是如何执行不是外部接口的函数呢?这就可以用inject
来执行没有提供外部接口的函数了。新建文件
testinject.lua
,写入下面代码:然后在 debug console 里执行
inject :0100000d ./testinject.lua
,如下:这时,
skynet
进程那边会输出下面的日志:这里只是测试了
skynet.error
接口,想执行任意接口都行的。local
函数不是很方便执行的,需要根据upvalue
去找,比较麻烦。所以一般只用来执行一些模块的接口。参考文章