2016-01-15 51 views
0

我想在我的Qt應用程序中實現V8調試器,但我得到異常。我有2個線程:主(處理GUI和調試器命令)和引擎線程(運行JavaScript代碼)。使用v8時讀取訪問衝突:: Debug :: SetMessageHandler

  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

FWIW我問上v8-users討論組也。 (沒有答案)

在此先感謝!

回答

0

隨着Ben Noordhuis回答我here我應該使用v8 :: Locker來同步線程之間的隔離。這裏是example。此外,isolate->Exit()之後v8::Debug::SetMessageHandler(HandleMessage);