Приложение Emscripten не выполняется

При запуске приложения asmjs\emscripten, скомпилированного из С++, он неожиданно начал регистрироваться: "run() called, but dependencies remain, so not running" на веб-консоли, и больше ничего не происходит. Я добавил некоторые cout в абсолютном начале моего основного, но даже они не достигнуты.

Приложение успешно выполнено до этого, но внезапно это произошло, и я не знаю, какое изменение вызвало это.

Кто-нибудь знает, как отладить это?

Update

После удаления как можно большего количества исходного кода это происходит, как только я #include, даже из-за того, что моя основная просто состоит из одного cout.

Ответ 1

В идеале у вас будет вся среда, когда она будет работать в управлении версиями, и создайте каждую версию, чтобы увидеть, где она сломалась.

У вас может быть ваш код в управлении версиями, но, возможно, не сам Emscripten. Если вы обновили Emscripten, это может привести к различиям в поведении. Я бы попытался вернуться к любой версии, которую вы использовали при ее запуске. Обратите внимание, что иногда разные каталоги кэша сохраняют изменения в версии Emscripten и, возможно, их нужно будет очистить вручную (я забыл, что именно).

Остальные зависимости могут означать, что вы пытаетесь что-то сделать, прежде чем Emscripten загрузит любые другие файлы, которые ему нужны, например файлы, запрошенные --preload-file или --memory-init-file. Обратите внимание, что в соответствии с https://kripken.github.io/emscripten-site/docs/getting_started/FAQ.html#faq-when-safe-to-call-compiled-functions вы не должны запускать какие-либо функции Emscripten, пока не будет запущена функция С++ main. Чтобы обнаружить это, вы можете, например, вызвать свою собственную функцию Javascript из main (есть другие способы).

Тот факт, что это не вызывало проблемы раньше, может быть чем-то, что кажется совершенно несвязанным: изменение или обновление в веб-браузере, изменение ограничений одновременных загрузок или изменение веб-сервера, на котором это выполняется. Вы можете посмотреть на вкладке "Сеть" в браузере, чтобы увидеть, что что-то скачет в вас как другое или подозрительное.

Однако, поскольку главное даже не достигнуто, возможно, это не так. Я бы попытался прокомментировать практически весь ваш код и сделать так, чтобы у вас практически ничего не было, кроме приветственной программы. Возможно, у вас нет правильной настройки в объекте Module, или, может быть, запрос на файл инициализации памяти терпит неудачу (вы можете проверить вкладку "Сеть" в браузере для этого). Если ваша основная мировая программа hello все еще не работает, вы можете опубликовать ее снова с помощью своего кода в отдельном вопросе.

Ответ 2

Это также может произойти, когда в браузере закончилась нехватка памяти. К сожалению, обработка памяти в браузере не находится под нашим контролем, поэтому вы не можете немного уменьшить свою полезную нагрузку. Это включает в себя размер кода, размер содержимого предварительной загрузки и т.д. В принципе все, что может снизить общее потребление памяти вашей программой, поможет исправить это. Производители браузеров постоянно работают над улучшением этого, но это займет некоторое время.

Ответ 3

Я думаю, вы не дали достаточно информации, чтобы действительно знать наверняка. Но может быть, например, что ваш js внезапно пересек некоторый порог памяти, который превышает то, что браузер хочет выделить ему. Вы могли бы попытаться уменьшить объем используемой/потоковой памяти некоторых ресурсов вместо предварительной загрузки/снизить уровень кода/использования -Os-оптимизации?