使用v8 :: Debug :: SetMessageHandler时读取访问冲突

时间:2016-01-15 21:43:18

标签: c++ v8

我正在尝试在我的Qt应用程序中实现V8调试器,但我得到了例外。

我有2个主题:main(处理GUI和调试器命令)和引擎线程(运行javascript代码)。

  1. 在主线程中,我通过调用:

    来初始化V8
    V8::InitializeICU();
    mPlatform = platform::CreateDefaultPlatform();
    V8::InitializePlatform(mPlatform);
    V8::Initialize();
    
  2. 我在引擎线程中创建了一个隔离区:

    ArrayBufferAllocator* allocator = new ArrayBufferAllocator();
    Isolate::CreateParams create_params;
    create_params.array_buffer_allocator = allocator;
    isolate = Isolate::New(create_params);
    
  3. 在主线程中,我正在使用SetMessageHandler

    isolate->Enter();
    v8::Debug::SetMessageHandler(HandleMessage);
    
    // HandlMessage function: 
    void HandleMessage(const v8::Debug::Message& message) {
        v8::String::Utf8Value response(message.GetJSON());
        // TODO do something with |response|
    }
    
  4. 与SetMessageHandler一致,我得到了读取访问冲突

    这是调用堆栈:

    Call stack

  5. FWIW我也曾在v8-users讨论小组上询问过。 (还没有答案)

    提前致谢!

1 个答案:

答案 0 :(得分:0)

当Ben Noordhuis回答我here时,我应该使用v8 :: Locker来同步线程之间的隔离。这是example。此外,在isolate->Exit()

之后缺少v8::Debug::SetMessageHandler(HandleMessage);