v8 引擎 - 创建数组会导致错误

v8 Engine - Creating an array causes an error

我在使用 v8 引擎创建数组时遇到问题。 这是我到目前为止得到的:

void function(Isolate* isolate) {    
    EscapableHandleScope scope(isolate);
    Local<Array> array = Array::New(isolate, n);
    ...
}

但是我的程序每次到第二行就崩溃了。 这是我收到的输出:

==== C stack trace ===============================
    v8::internal::Scope::set_start_position [0x000002A7A393E69E+10258841]
    v8::internal::Scope::set_start_position [0x000002A7A37A1C63+8568670]
    v8::internal::Scope::set_start_position [0x000002A7A37A1E02+8569085]
    v8::internal::Scope::set_start_position [0x000002A7A3004CBC+585655]

我已经尝试在这个函数中创建一个整数或另一个对象。它在那里完美地工作。 知道这里出了什么问题吗?

I find out what went wrong. But I am not 100% sure why. After i put the Array initialization in a Context_Scope, it worked. But why had it worked for an Integer initialization (without the context scope)?

此处信息不足,无法判断发生了什么。根据您粘贴的代码段,我只能说 n 未定义,因此它甚至不应该编译,但显然这不是您正在谈论的问题。

请在调试模式下编译您的代码,然后在调试器中运行它,以便您可以获得正确的堆栈跟踪。也许它不仅会崩溃,还会 运行 变成一个断言 ("DCHECK"),这可能会阐明问题所在。 (一般来说,学习如何使用调试器几乎是使用 C++ 的必要条件。)

将您拥有的内容与官方示例代码进行比较也可能会有所帮助,例如https://chromium.googlesource.com/v8/v8/+/master/samples/hello-world.cc.

如果您仍然需要帮助:请post您的完整代码,包括您如何构建它以及您使用的是哪个 V8 版本。


在您编辑问题后进行编辑:

  • 诸如缺少 ContextScope 之类的事情是我要求查看您的整个代码的原因 ;-)

  • 小整数与上下文无关。 (这是您通常不关心的实现细节,因为对于所有有趣的事情,您无论如何都需要一个上下文。)