Error: RangeError: invalid stack index -3是什么错误?


(kaitohh) #1

我写了一个每隔一段时间通过 http.request post数据的程序并部署到了ruff上。
但是当ruff每次post了一段时间之后,会自己莫名其妙的停止,有时候不报任何错误,就直接自己退出了,有时候还会报
Error: RangeError: invalid stack index -3 的错误。
请问这个错误具体是什么意思呢?


(kenshin) #2

你好,能把完整代码贴出来看一下么


(kaitohh) #3

核心代码是这样的

IotService.prototype.createPromise = function(__this) {
    var _this = __this;
    var message = _this.message;
    var timer;
    var promise = new Promise(function(fulfill, reject) {
        var msg = JSON.stringify(message);
        message["messages"].length = 0;
        _this.options.headers['Content-Length'] = msg.length;
        var req = http.request(_this.options, function(res) {
            res.on('data', function(chunk) {
                fulfill(chunk);
            });

            res.on('end', function() {
                req.abort();
            });
        });
        timer = setTimeout(function() {
            req.abort();
            reject('timeout');
        }, 30000);
        req.on('error', function(e) {
            req.abort();
            reject(e.message);
        });
        req.write(msg);
        req.end();
    });
    promise.then(function(chunk) {
        console.log('response Body:' + chunk);
        clearTimeout(timer);
        _this.createPromise(_this);
    }, function(err) {
        console.log('problem with request: ' + err);
        clearTimeout(timer);
        setTimeout(_this.createPromise, _this.timeInterval, _this);
    });
}

在外部实例化了一个IotService,然后调用 createPromise 。之后每隔一段时间在 createPromise 函数内部的 promise.then 部分来调用 createPromise 实现循环请求。

然而在request一段时间后程序会退出,有时还会报 Error: RangeError: invalid stack index -3


(kaitohh) #4

有啥解决方案吗?问题依旧


(kenshin) #5

明天我再找同事想办法解决,上周我跟丢了。。。抱歉


(Young) #6

只是在ruff上才这样么?在PC上用node试过么?


(jerry) #7

你的核心代码,我在 PC 上测试没什么问题。你给出的错误是在 PC 运行还是板子上运行得到的?能把完整的代码给出来吗?


(kaitohh) #8

你好,我在PC上用node.js跑过,一切顺利。但是在ruff上跑一段时间之后就会报这个invaild stack这个看不懂的错误。我不知道这个错误到底是什么意思呢?


(jerry) #9

你指的在 ruff 上跑是在 PC 上的 ruff 还是板子上的 ruff 呢?我在 PC 上的 ruff 测是没有问题的,还有,大概测试多长时间会出现这个问题?


(kaitohh) #10

我是在板子上的ruff上跑的。停止运行的时间取决于我设置的发送间隔,在将发送间隔时间设置的很小时,大约10分钟左右就会停止运行。增大间隔时间后,有时会在运行1个多小时之后停止运行。对于上述现象,我个人认为这可能和ruff本身的内存溢出有关系?


(jerry) #11

那可能是内存耗尽了,你看能不能优化下使用方式,避免这个问题。
另外,报错的完整信息就只有 Error: RangeError: invalid stack index -3 吗?


(kaitohh) #12

我没有任何不断申请内存的操作,但是我有不断地对数组进行push和pop的操作,所以我怀疑是垃圾回收或者类似的问题?

报错代码

Error: RangeError: invalid stack index -3
    at [anon] (/data/ruff/forJenkins/workspace/ruff-embedded/lib/duktape/prep/duktape.c:17067) internal
    at [anon] () native strict preventsyield
    at [anon] (/data/ruff/forJenkins/workspace/ruff-embedded/src/ruff.c:282) internal
    at [anon] () native strict preventsyield

(kenshin) #13

你好,根据您提供的代码,我们做了测试,没有能够重现您的 Error。
不知道目前您的问题还存在吗?

如果可以的话,贴上完整的 APP 代码,供我们进一步测试排查

您也可以尝试调整 interval 参数,先暂时回避问题,完成业务逻辑


(jerry) #14

Error: RangeError: invalid stack index -3 这个错误在 1.11.13 版本中修复了。


(simon-ssr) #15

一个问题 ,跟踪了两年吗:joy: