Emscripten应用程序未执行

Emscripten application not executing

本文关键字:执行 应用程序 Emscripten      更新时间:2023-10-16

当运行我的asmjsemscripten应用程序时,从c++编译,它突然开始将:"run() called, but dependencies remain, so not running"记录到web控制台,并且没有发生更多的事情。我在main的绝对开头添加了一些cout的,但即使它们也没有到达。

应用程序之前执行成功,但突然开始发生这种情况,我不知道是什么变化触发的

有人知道如何调试这个吗?

更新

在删除了尽可能多的源代码后,只要我#include就会发生这种情况,即使我的main只是由一个单独的cout组成。

理想情况下,您应该拥有在版本控制中运行的整个环境,并构建自那以后的每个版本,以查看它在哪里出错。

您可能在版本控制中有您的代码,但可能没有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服务器的更改。你可以查看浏览器的"网络"选项卡,看看是否有什么不同或可疑的地方。

然而,由于main甚至没有到达,那么它可能不是。我会尝试注释掉几乎所有的代码,这样你实际上除了一个hello-world程序什么都没有。也许您在Module对象中没有正确的设置,或者对内存初始化文件的请求失败(您可以在浏览器的Network选项卡中检查该选项卡)。如果基本的hello world程序仍然不能工作,那么您可以在一个单独的问题中再次发布它的代码。

当浏览器内存不足时也会发生这种情况。不幸的是,浏览器的内存处理不在我们的控制范围内,所以除了减少有效负载之外,您可以做的不多。这包括代码大小、预加载内容大小等。基本上,任何可以减少程序总内存消耗的方法都有助于解决这个问题。浏览器厂商一直在努力改进这一点,但这还需要一段时间。

我认为你没有提供足够的信息来真正确定。但它可能是,例如,你的js突然越过一些内存阈值,超过了浏览器想要分配给它。你可以尝试减少内存使用量/流式传输一些资产而不是预加载它们/发布更少的代码/使用- o优化级别?