Моя программа 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++
Я пытался работать с отчетом об узле, в надежде получить подсказку, но даже с установленной обработкой фатальной ошибки, отчет об узле в этом случае не вызывается.
Я также проверил, что все ссылки на объекты NAPI, которые я храню в своем аддоне, не являются слабыми ссылками.
Как я могу узнать, на какой объект ссылаются или где находится ссылка?