Неустранимая ошибка в ../../src/api.h, строка 499. Проверка не удалась: enter_contexts_.length () == 0 - PullRequest
0 голосов
/ 28 октября 2019

Я новичок с v8. Выполнение js-скрипта в контексте оболочки. Работает нормально, когда сборка v8 в x86. Проблема возникает при сборке в x64. Разрушение v8:Locker до Scope

Вот что я делаю

v8::Isolate::Scope isolate_scope(isolate);
v8::Locker lock(isolate);
v8::HandleScope handle_scope(isolate);
v8::Local < v8::Context > context = ...
context->Enter();

Ядро сбрасывается при выполнении скрипта для entered_contexts_.length(), равным 1.

# Fatal error in ../../src/api.h, line 499
# Check failed: entered_contexts_.length() == 0.
#

==== C stack trace ===============================

    ./LIB64/libv8_libbase.so(+0x15923) [0x7f1869f68923]
    ./LIB64/libv8_libbase.so(V8_Fatal+0xdd) [0x7f1869f63c8d]
    ./LIB64/libv8.so(+0x1f41cf) [0x7f186745a1cf]
    ./LIB64/libv8.so(+0xa747fb) [0x7f1867cda7fb]
    ./LIB64/libv8.so(v8::Locker::~Locker()+0x4a) [0x7f1867cda73a]

Что может вызвать проблемы в x64, где тот же код работает в x86? Также, как я могу правильно отладить контекст с помощью общей библиотеки libv8.so с исходным кодом?

1 Ответ

0 голосов
/ 28 октября 2019

Это должно вести себя одинаково на всех платформах. Может быть, одна из сборок является сборкой Debug, а другая - нет?

Как правило, для отладки вам нужна сборка Debug и отладчик. Является ли libv8.so разделяемой библиотекой или нет, не имеет значения, если она скомпилирована в режиме отладки. (Я отлаживаю общий доступ libv8.so все время.)

При обращении за помощью, помимо предоставления воспроизводимого примера, было бы полезно, если бы вы указали версию V8, которую вы используете. В текущей версии строка "enter_contexts_.length" никогда не отображается в api.h, поэтому я знаю, что вы используете более старую версию, но я не знаю, какая.

Все, что сказано,дикое предположение о самой проблеме: учитывая, что вы делаете context->Enter(), а затем получаете ошибку, потому что entered_contexts_.length() == 1, может быть, попытаться выйти из контекста, когда вы закончите с этим?

...