Как справиться с аварией двигателя V8, когда процессу не хватает памяти

Обе,узел консоль и Qt5 на базе V8QJSEngine может быть разбит следующим кодом:

a = []; for (;;) { a.push("hello"); }

вывод узла перед сбоем:

FATAL ERROR: JS Allocation failed - process out of memory

QJSEngineВывод перед сбоем:

#
# Fatal error in JS
# Allocation failed - process out of memory
#

Если я побегуQJSEngine тестовое приложение (см. ниже) под отладчиком, оно показываетv8::internal::OS::DebugBreak Звоните внутри кода V8. Если я заверну код вызоваQJSEngine::evaluate в__try-__except (SEH), тогда приложение не будет аварийно завершено, но это решение зависит от Windows.

Вопрос: Есть ли способ справитьсяv8::internal::OS::DebugBreak независимым от платформы способом в приложениях узлов и Qt?

=== QJSEngine тестовый код ===

Среда разработки: QtCreator с Qt5 и Windows SDK 7.1, в Windows XP SP3

QJSEngineTest.pro:

TEMPLATE = app
QT -= gui
QT += core qml
CONFIG -= app_bundle
CONFIG += console
SOURCES += main.cpp
TARGET = QJSEngineTest

main.cpp без SEH (это приведет к сбою):

#include <QtQml/QJSEngine>

int main(int, char**)
{
  try {
    QJSEngine engine;
    QJSValue value = engine.evaluate("a = []; for (;;) { a.push('hello'); }");
    qDebug(value.isError() ? "Error" : value.toString().toStdString().c_str());
  } catch (...) {
    qDebug("Exception");
  }
  return 0;
}

main.cpp с SEH (это не приводит к сбою, выводит «Фатальное исключение»):

#include <QtQml/QJSEngine>
#include <Windows.h>

void runTest()
{
  try {
    QJSEngine engine;
    QJSValue value = engine.evaluate("a = []; for (;;) { a.push('hello'); }");
    qDebug(value.isError() ? "Error" : value.toString().toStdString().c_str());
  } catch (...) {
    qDebug("Exception");
  }
}

int main(int, char**)
{
  __try {
    runTest();
  } __except(EXCEPTION_EXECUTE_HANDLER) {
    qDebug("Fatal exception");
  }
  return 0;
}

Ответы на вопрос(1)

Ваш ответ на вопрос