我的代码:
#include <v8.h>
#include <v8-debug.h>
#include <iostream>
#include <string>
#include <assert.h>
using namespace std;
using namespace v8;
static Local<Value> execJsScript(const std::string& jsCode) {
Local<String> source = String::NewFromUtf8(Isolate::GetCurrent(), jsCode.c_str());
Local<v8::Script> script = Script::Compile(source);
assert(!script.IsEmpty());
return script->Run();
}
void test_js_DebugBreak() {
cout << "V8 version: " << v8::V8::GetVersion() << endl;
auto isolate = Isolate::New();
Isolate::Scope isolateScope(isolate);
HandleScope handleScope(isolate);
Handle<Context> context = Context::New(isolate);
Context::Scope contextScope(context);
auto globalObj = context->Global();
v8::Debug::EnableAgent("test", 5858, true);
v8::Debug::DebugBreak(isolate);
// I get this error here:
// # Fatal error in ..\..\src\compiler.cc, line 274
// # CHECK(feedback_vector_->length() == length) failed
execJsScript(
"function foo(f) { f(); };"
"function enqueueMicrotask(callback) {"
" foo(wrapped);"
" function wrapped() {"
" callback();"
" }"
"};"
"enqueueMicrotask(function() {"
" throw new Error('fooerr');"
"});"
);
}
现在,当你执行它时,你需要附加一个JS调试器,例如使用node-inspector。它将在第一个JS表达式中按预期中断。点击&#39;继续&#39;在调试器中,您会收到致命错误。
我做错了吗?或者这是V8中的错误?这是V8 3.25.8。
(我也在邮件列表here中询问。)
答案 0 :(得分:1)
来自Michael Stanton的邮件列表here:
嗨Albert,这是V8中的一个错误(我的错),并已在V8中修复 12年3月25日。谢谢, - 迈克尔斯坦顿 --V8
我尝试了3.25.14并且它有效。