小编Wes*_*ham的帖子

是否有可能在Lua中复制Ruby的method_missing?

我相当肯定,在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)

syntax lua metaprogramming method-missing

6
推荐指数
1
解决办法
364
查看次数

在libpthread.so中运行节点时出现分段错误

我一直在节点中编写一个守护进程(由托管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存储库),以供参考.

centos segmentation-fault node.js

5
推荐指数
1
解决办法
480
查看次数