Я немного изменил образец hello-world.cc
, импортировав некоторый код из d8
.Затем, используя websocketpp и asio , я добавил в программу сервер WebSocket.Кроме того, я использовал V8 инспектор с точки зрения устройства для внедрения , чтобы добавить простую реализацию для протокола инспектора.
Теперь, когда я запускаю свою программу и затем использую Chrome, чтобы перейти к chrome-devtools://devtools/bundled/inspector.html?experiments=true&v8only=true&ws=127.0.0.1:9002
, я получаю следующие сообщения от CDT:
{"id":1,"method":"Profiler.enable"}
для ведьмы ответ:
{"id":1,"result":{}}
затем
{"id":2,"method":"Runtime.enable"}
для этого aуведомление и ответ отправляются:
{"method":"Runtime.executionContextCreated",
"params":{"context":{"id":1,"origin":"","name":"MyApplication"}}}
{"id":2,"result":{}}
, затем:
{"id":3,"method":"Debugger.enable"}
, уведомление и ответ отправляются обратно клиенту:
{"method":"Debugger.scriptParsed",
"params":{
"scriptId":"4","url":"func_add.js","startLine":0,
"startColumn":0,"endLine":0,"endColumn":35,
"executionContextId":1,"hash":"365568ee6245be1376631dbf20e7de9d42c9adf1",
"isLiveEdit":false,"sourceMapURL":"","hasSourceURL":false,
"isModule":false,"length":35
}
}
{"id":3,"result":{"debuggerId":"(DC239109305DBEF825A955524584A826)"}}
На данный момент я не буду добавлять к вопросу другие сообщения, полученные от внешнего интерфейса, и отправленные ответы.Последний обмен:
{"id":7,"method":"Runtime.runIfWaitingForDebugger"}
{"id":7,"result":{}}
Моя проблема: в CDT вкладка Sources
пуста (и поэтому я не могу попытаться установить точку останова).
Мой кодвнедрить JS в V8:
const char * pszScript = "function add( a, b) { return a+b; }";
v8::Local<v8::String> source =
v8::String::NewFromUtf8(isolate, pszScript, v8::NewStringType::kNormal).ToLocalChecked();
v8::Local<v8::String> name =
v8::String::NewFromUtf8(isolate, "func_add.js", v8::NewStringType::kNormal).ToLocalChecked();
ExecuteString( isolate, source, name );
Моя ExecuteString
функция:
bool ExecuteString(v8::Isolate* isolate, v8::Local<v8::String> source,
v8::Local<v8::Value> name) {
v8::HandleScope handle_scope(isolate);
v8::Local<v8::Context> context = isolate->GetCurrentContext();
v8::Context::Scope context_scope(context);
v8::TryCatch try_catch(isolate);
try_catch.SetVerbose(true);
v8::MaybeLocal<v8::Value> maybe_result;
bool success = true;
v8::ScriptOrigin origin(name);
v8::ScriptCompiler::Source script_source(source, origin);
v8::MaybeLocal<v8::Script> maybe_script;
maybe_script = v8::ScriptCompiler::Compile(context, &script_source);
v8::Local<v8::Script> script;
if (!maybe_script.ToLocal(&script)) {
// Print errors that happened during compilation.
ReportException(isolate, &try_catch);
return false;
}
maybe_result = script->Run(context);
v8::Local<v8::Value> result;
if (!maybe_result.ToLocal(&result)) {
// Print errors that happened during execution.
ReportException(isolate, &try_catch);
return false;
}
if (!result->IsUndefined()) {
// If all went well and the result wasn't undefined then print
// the returned value.
v8::String::Utf8Value str(isolate, result);
fwrite(*str, sizeof(**str), str.length(), stdout);
printf("\n");
} else {
printf("undefined\n");
}
return success;
}
Я думаю, что я делаю что-то не так, так как я должен иметь возможность видеть какой-то func_add.js
источникв CDT с содержанием function add( a, b) { return a+b; }