我正在尝试进行一些错误检查,以检测从 C++ 调用的 javascript 回调函数是否产生任何错误。此代码在 v8::String::Utf8Value 构造函数上崩溃,我不知道为什么。
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 代码。