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

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

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

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

Обновить

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

10

Решение

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

Возможно, ваш код находится в управлении версиями, но, возможно, не в самом 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, пока C ++ main Функция запустилась. Чтобы обнаружить это, вы можете, например, вызвать свою собственную функцию Javascript из main (есть и другие способы).

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

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

6

Другие решения

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

3

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

1