我相当肯定,在Lua中,你可以使用一个给定的元表的__index,__newindex和__call大致复制Ruby的method_missing.我有点:
function method_missing(selfs, func)
local meta = getmetatable(selfs)
local f
if meta then
f = meta.__index
else
meta = {}
f = rawget
end
meta.__index = function(self, name)
local v = f(self, name)
if v then
return v
end
local metahack = {
__call = function(self, ...)
return func(selfs, name, ...)
end
}
return setmetatable({}, metahack)
end
setmetatable(selfs, meta)
end
_G:method_missing(function(self, name, ...)
if name=="test_print" then
print("Oh my lord, it's method missing!", …Run Code Online (Sandbox Code Playgroud) 我一直在节点中编写一个守护进程(由托管forever),并注意到工作进程有时会随机死掉.我添加了一个segault处理程序来查看是什么,但典型的堆栈跟踪是......无益的?
PID 9949 received SIGSEGV for address: 0x0
/home/wesley/app/node_modules/segfault-handler/build/Release/segfault-handler.node(+0xf60)[0x7f11dd3d8f60]
/lib64/libpthread.so.0[0x354760f710]
[0x3d3c10b0d799]
Run Code Online (Sandbox Code Playgroud)
一旦我收到失败的跟踪,相反:
PID 5820 received SIGSEGV for address: 0x18
/home/wesley/app/node_modules/segfault-handler/build/Release/segfault-handler.node(+0xf60)[0x7fdfab749f60]
/lib64/libpthread.so.0[0x354760f710]
/usr/bin/node(_ZN4node6Buffer14MakeFastBufferERKN2v89ArgumentsE+0x168)[0x426778]
[0x1d06e36ccdfb]
Run Code Online (Sandbox Code Playgroud)
其中仍然显示最顶层的呼叫libpthread.so(虽然在节点正确的呼叫之前.)
我发现很难相信segfault来自libpthread.so(或......无处?),但它看起来像什么?过去有没有人有这样的经历?有没有人有进一步调试的提示?
我在CentOS 6.5上运行节点v0.10.29(来自epel存储库),以供参考.