Emscripten应用程序未执行

时间:2015-08-06 15:26:22

标签: c++ emscripten asm.js

运行从C ++编译的asmjs \ emscripten应用程序时,它突然开始记录:"run() called, but dependencies remain, so not running"到Web控制台,不再发生任何事情。 我在主要的绝对开始时添加了一些 cout的,但即使它们没有到达。

该应用程序之前已成功执行,但突然之间就开始发生这种情况,我不知道是什么改变引发了这一点。

有谁知道如何调试这个?

更新

在删除尽可能多的源代码之后,只要我#include就会发生这种情况,即使我的主要只包含一个cout。

2 个答案:

答案 0 :(得分: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,在C ++ main函数运行之前,不应尝试运行任何Emscripten函数。要检测到这一点,您可以从main调用自己的Javascript函数(还有其他方法)。

之前没有引起问题的事实可能是一些看起来非常不相关的事情:Web浏览器中的更改或更新,更改并发下载的限制,或者从此处运行的Web服务器的更改。您可以在浏览器的“网络”标签中查看是否有任何内容因为不同或可疑而跳出来。

然而,由于主要事件甚至没有达到,所以可能不是那样。我会尝试将几乎所有的代码都注释掉,然后制作它,这样你几乎只有一个hello-world程序。也许您在Module对象中没有正确的设置,或者内存初始化文件的请求可能失败(您可以在浏览器的“网络”选项卡中查看该文件)。如果您的基本hello world程序仍然无效,那么您可以使用其代码再次发布单独的问题。

答案 1 :(得分:1)

我认为你没有给出足够的信息来确切知道。但可能是你的js突然超过了某个内存阈值,超出了浏览器想要分配的内存阈值。您可以尝试减少使用的内存量/流式传输某些资产而不是预加载/发送更少的代码/使用-Os优化级别?