Почему v8 segfault в v8 :: Isolate :: New? - PullRequest
0 голосов
/ 12 марта 2019

Я видел похожие вопросы, но ни один из них, похоже, не работает для меня. Я использую пример кода hello-world в качестве основы:

v8::V8::InitializeICUDefaultLocation(argv[0]);
v8::V8::InitializeExternalStartupData(argv[0]);
std::unique_ptr<v8::Platform> platform = v8::platform::NewDefaultPlatform();
v8::V8::InitializePlatform(platform.get());
v8::V8::Initialize();

// Create a new Isolate and make it the current one.
v8::Isolate::CreateParams create_params;
create_params.array_buffer_allocator =
      v8::ArrayBuffer::Allocator::NewDefaultAllocator();
v8::Isolate* isolate = v8::Isolate::New(create_params);

Сегфоут происходит в последней строке выше. Я ссылаюсь на libv8_monolith. Я получаю следующее прерывание:

Thread 1 "hiram-renderer-" received signal SIGSEGV, Segmentation fault.
__GI___libc_free (warning: Could not find DWO CU obj/v8_initializers/interpreter-generator.dwo(0x41869846475c35aa) referenced by CU at offset 0x18018ec [in module /home/csnelson/meps/projects/mf/renderer-hiram/.build/renderer-hiram/linux/amd64/debug/engine/hiram-renderer-engine-test]
mem=0x400000000000000) at malloc.c:3085
3085    malloc.c: No such file or directory.
(gdb) bt
#0  __GI___libc_free (mem=0x400000000000000) at malloc.c:3085
#1  0x00000000023510e8 in v8::internal::interpreter::GenerateBytecodeHandler(v8::internal::Isolate*, v8::internal::interpreter::Bytecode, v8::internal::interpreter::OperandScale, int, v8::internal::AssemblerOptions const&) () at ../../src/interpreter/interpreter-generator.cc:3304
warning: Could not find DWO CU obj/v8_initializers/setup-builtins-internal.dwo(0x2e9f81fe7c4f3a21) referenced by CU at offset 0x18010a8 [in module /home/csnelson/meps/projects/mf/renderer-hiram/.build/renderer-hiram/linux/amd64/debug/engine/hiram-renderer-engine-test]
#2  0x0000000001f648b3 in v8::internal::(anonymous namespace)::GenerateBytecodeHandler(v8::internal::Isolate*, int, char const*, v8::internal::interpreter::OperandScale, v8::internal::interpreter::Bytecode) () at ../../src/builtins/setup-builtins-internal.cc:284
#3  0x0000000001f55960 in v8::internal::SetupIsolateDelegate::SetupBuiltinsInternal(v8::internal::Isolate*) ()
    at ../../src/builtins/setup-builtins-internal.cc:348
warning: Could not find DWO CU obj/v8_init/setup-isolate-full.dwo(0xe7b834785ad1ac3a) referenced by CU at offset 0x1801028 [in module /home/csnelson/meps/projects/mf/renderer-hiram/.build/renderer-hiram/linux/amd64/debug/engine/hiram-renderer-engine-test]
#4  0x0000000001f401c7 in SetupBuiltins () at ../../src/setup-isolate-full.cc:18
warning: Could not find DWO CU obj/v8_base/isolate.dwo(0xe943b1082c1ddbf9) referenced by CU at offset 0xd9abfc [in module /home/csnelson/meps/projects/mf/renderer-hiram/.build/renderer-hiram/linux/amd64/debug/engine/hiram-renderer-engine-test]
#5  0x00000000019665b3 in Init () at ../../src/isolate.cc:3363
#6  0x0000000001965cdd in v8::internal::Isolate::InitWithoutSnapshot() () at ../../src/isolate.cc:3254
warning: Could not find DWO CU obj/v8_base/api.dwo(0xbdbb31bc688b926c) referenced by CU at offset 0x1d5b0a [in module /home/csnelson/meps/projects/mf/renderer-hiram/.build/renderer-hiram/linux/amd64/debug/engine/hiram-renderer-engine-test]
#7  0x0000000001235bd7 in Initialize () at ../../src/api.cc:8205
#8  0x000000000123612f in New () at ../../src/api.cc:8217
#9  0x0000000001119b11 in main (argc=1, argv=0x7fffffffe3b8) at ../../../../../engine/test/main.cpp:28

Любая помощь будет оценена. Я пробовал несколько вещей, компиляция с включенными и отключенными снимками и так далее. Кажется, ничто не имеет значения.

1 Ответ

1 голос
/ 12 марта 2019

Как оказалось, я строил против головы v8.Я не знаю, сломана ли голова или нет, так как d8 и все тестовые программы работали нормально.Тем не менее, когда я скомпилировал минимальную программу, взяв почти весь мир, исходный текст v8, инициализация зависла на неопределенное время.

Наконец, я обнаружил, что мне нужно выполнить полную проверку исходного кода.Ранее я делал:

fetch --no-history v8

Однако, когда я проверял ветку:

git checkout branch-heads/7.2

А потом запускал:

gclient sync

Это всегдапотерпеть поражение.Теперь я запускаю:

fetch v8
git checkout branch-heads/7.2
gclient sync

Затем я настраиваю свою сборку и компилирую.Получающийся файл libv8_monolith.a работает как с моим минимальным тестовым набором, так и с более полным приложением, которое я пытаюсь встроить.

Очень хорошо может быть взаимодействие с более поздним v8 и чем-то в моем более крупном приложении.Тем не менее, пока что все работает, поэтому я надеюсь, что это просто ошибка в голове, которая плохо работает с моей средой.

...