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

И то и другоеузел консоль и Qt5 'с V8 на основеQJSEngine может быть разбит следующим кодом:

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-__exceptSEH), то приложение победилоСбой, но это решение зависит от 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 

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 
#include 

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)

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