25.1.3. 访问其他协程
调式库的所有自省函数都能够接受一个可选的协程作为第一个参数, 这样就可以从外部来检查这个协程。
co = coroutine.create(function ()
local x = 10
coroutine.yield()
error("some error")
end)
coroutine.resume(co)
print(debug.traceback(co))
对函数traceback的调用作用在协程co上,结果如下
stack traceback:
[C]: in function 'yield'
temp:3: in function <temp:1>
由于协程和主程序运行在不同的栈上,所以回溯没有跟踪到对函数 resume 的调用。当协程发生错误时并不会进行栈展开,这就意味着可以在错误发生后检查错误。
如果再次唤醒协程,它就会提示一个错误:
print(coroutine.resume(co)) --> false temp:4: some error
现在如果输出栈回溯,会得到这样的结果:
stack traceback:
[C]: in function 'error'
temp:4: in function <temp:1>
即使在错误发生后,也可以检查协程中的局部变量
print(debug.getlocal(co, 1, 1)) --> x 10