compiler.cc:274:CHECK(feedback_vector _-> length()== length)失败

时间:2014-03-17 12:35:50

标签: javascript c++ v8

我的代码:

#include <v8.h>
#include <v8-debug.h>
#include <iostream>
#include <string>
#include <assert.h>

using namespace std;
using namespace v8;

static Local<Value> execJsScript(const std::string& jsCode) {
    Local<String> source = String::NewFromUtf8(Isolate::GetCurrent(), jsCode.c_str());
    Local<v8::Script> script = Script::Compile(source);
    assert(!script.IsEmpty());
    return script->Run();
}

void test_js_DebugBreak() {
    cout << "V8 version: " << v8::V8::GetVersion() << endl;

    auto isolate = Isolate::New();
    Isolate::Scope isolateScope(isolate);
    HandleScope handleScope(isolate);
    Handle<Context> context = Context::New(isolate);
    Context::Scope contextScope(context);
    auto globalObj = context->Global();

    v8::Debug::EnableAgent("test", 5858, true);
    v8::Debug::DebugBreak(isolate);

    // I get this error here:
    // # Fatal error in ..\..\src\compiler.cc, line 274
    // # CHECK(feedback_vector_->length() == length) failed
    execJsScript(
        "function foo(f) { f(); };"
        "function enqueueMicrotask(callback) {"
        "   foo(wrapped);"
        "   function wrapped() {"
        "       callback();"
        "   }"
        "};"
        "enqueueMicrotask(function() {"
        "   throw new Error('fooerr');"
        "});"
    );
}

现在,当你执行它时,你需要附加一个JS调试器,例如使用node-inspector。它将在第一个JS表达式中按预期中断。点击&#39;继续&#39;在调试器中,您会收到致命错误。

我做错了吗?或者这是V8中的错误?这是V8 3.25.8。

(我也在邮件列表here中询问。)

1 个答案:

答案 0 :(得分:1)

来自Michael Stanton的邮件列表here

  

嗨Albert,这是V8中的一个错误(我的错),并已在V8中修复   12年3月25日。谢谢,    - 迈克尔斯坦顿   --V8

我尝试了3.25.14并且它有效。