2013-06-04 69 views
0

我試圖做一些錯誤檢查,以檢測從C++調用的JavaScript回調函數是否生成任何錯誤。這段代碼在v8 :: String :: Utf8Value構造函數中崩潰,我不知道爲什麼。將異常轉換爲字符串時在v8中崩潰

v8::Locker locker; 
v8::HandleScope scope; 
v8::TryCatch tryCatch; 

v8::Persistent<v8::Function> func = static_cast<PieMenu*> (info.Packet->Control)->m_callback_functions[info.Packet->Integer]; 
v8::Handle<v8::Value> v = func->Call ((func), 0, NULL); 

if (tryCatch.HasCaught()) { 
    v8::String::Utf8Value exception_str(tryCatch.Exception()); 
    if (exception_str.length() > 0) { 
     wxLogVerbose(std::string(*exception_str).c_str()); 
    } 
} 

錯誤是「訪問衝突讀取位置0x0000000000000027」。這導致我懷疑異常對象中有一個錯誤的指針,但我不知道還有什麼地方需要注意。以下是堆棧跟蹤:

v8.dll!v8::internal::Execution::ToString(v8::internal::Handle<v8::internal::Object> obj={...}, bool * exc=0x00000000027be8a0) 
v8.dll!v8::Value::ToString() 
v8.dll!v8::String::Utf8Value::Utf8Value(v8::Handle<v8::Value> obj={...}) 

我正在使用Visual Studio 2008和最新的trunk v8代碼。

+0

這是什麼運氣?我遇到了tryCatch.HasCaught()返回true的非常類似的問題。此外tryCatch.Exception()。IsEmpty()爲false,但String :: Utf8Value異常(tryCatch-> Exception())== NULL。 – irbull

回答

0

從內存地址來看,它很像是試圖從指向NULL的對象讀取屬性。

我認爲你的Call呼叫是錯誤的。我記得在通過NULL作爲第三個參數時,即使通過0參數,我也遇到了類似的問題。試試這個:

v8::Handle<v8::Value> argv; 
func->Call ((func), 0, &argv); 
相關問題