2015-08-06 5 views
10

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

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

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

Update

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

ответ

1

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

6

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

Возможно, у вас есть код в управлении версиями, но, возможно, не сам 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 (есть и другие способы).

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

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

+0

Я сделал, как вы сказали, и, как кажется, просто включить sdl.h из почти пустого проекта достаточно, чтобы вызвать это. –

+0

@ViktorSehr Я бы опубликовал детали как отдельный вопрос, используя код + командную строку, которую вы используете для компиляции. (Ваш первоначальный вопрос: «Как я могу найти проблему», но теперь это «как я могу исправить эту проблему») –

+1

«Просто включить sdl.h из почти пустого проекта достаточно, чтобы вызвать это» Я думаю, что вы следует перейти к инструменту em_sdk и обновить компилятор emscripten до последней ведущей ветви, а также использовать функцию «очистить кеш», чтобы убедиться, что она восстанавливает свою кэшированную версию SDL из источника. если у вас действительно есть проблема с пакетом SDL (emscripten) SDL, это ошибка, о которой вы можете сообщить в alon. Думаю –

3

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

+0

Я рекомендую редактировать «это происходит, когда» -> «это также может произойдет, когда ". Потому что для меня это произошло не из-за памяти, а по причине, упомянутой в ответе Михала Чаремзы. –