我的node.js程序经常在v8 :: internal :: GlobalHandles :: PendingPhantomCallback中终止,并出现V8致命错误,指出弱引用回调未能进行正确的清理。 V8的致命错误是:“句柄未在第一个回调中重置。”
我不明白这一点,因为我的插件不会创建弱引用或注册回调。我的插件使用N-API ObjectReferences(napi_create_reference)创建引用。全部具有非零的参考计数。我的插件仅使用N-API,并且未注册任何V8特定的弱引用回调。似乎N-API可以解决这个问题?
失败的调用栈是:
node.exe!v8::base::OS::Abort() Line 897 C++
node.exe!V8_Fatal(const char * file, int line, const char * format, ...) Line 171 C++
node.exe!v8::internal::GlobalHandles::PendingPhantomCallback::Invoke(v8::internal::Isolate *) Line 910 C++
node.exe!v8::internal::GlobalHandles::DispatchPendingPhantomCallbacks(bool synchronous_second_pass) Line 870 C++
node.exe!v8::internal::GlobalHandles::PostGarbageCollectionProcessing(v8::internal::GarbageCollector collector, const v8::GCCallbackFlags gc_callback_flags) Line 930 C++
node.exe!v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector collector, const v8::GCCallbackFlags gc_callback_flags) Line 1775 C++
node.exe!v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace space, v8::internal::GarbageCollectionReason gc_reason, const v8::GCCallbackFlags gc_callback_flags) Line 1392 C++
node.exe!v8::internal::Heap::CollectAllGarbage(int) Line 1156 C++
node.exe!v8::internal::Heap::HandleGCRequest() Line 1053 C++
node.exe!v8::internal::StackGuard::HandleInterrupts() Line 517 C++
node.exe!v8::internal::__RT_impl_Runtime_StackGuard(v8::internal::Arguments) Line 270 C++
node.exe!v8::internal::Runtime_StackGuard(int args_length, v8::internal::Object * * args_object, v8::internal::Isolate * isolate) Line 260 C++
我尝试使用node-report运行,以期获得提示,但是即使设置了致命错误处理,在这种情况下也不会调用node-report。
我还验证了我在插件中保存的所有NAPI对象引用都不是弱引用。
如何找出正在引用的对象或保存引用的位置?