【问题标题】:Emscripten application not executingEmscripten 应用程序未执行
【发布时间】:2015-08-06 15:26:22
【问题描述】:

当我运行我的 asmjs\emscripten 应用程序时,它是用 C++ 编译的,它突然开始在 web 控制台上记录:"run() called, but dependencies remain, so not running",然后什么也没有发生。 我在 main 的绝对开头添加了一些 cout,但即使它们也没有到达。

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

有人知道如何调试吗?

更新

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

【问题讨论】:

    标签: c++ emscripten asm.js


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

    这在以前没有引起问题的事实可能看起来完全不相关:Web 浏览器中的更改或更新、并发下载限制的更改或运行它的 Web 服务器的更改。您可以查看浏览器中的“网络”选项卡,看看是否有任何异常或可疑的地方突如其来。

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

    【讨论】:

    • 我按照你说的做了,看起来,仅仅从一个几乎空的项目中包含 sdl.h 就足以导致这种情况。
    • @ViktorSehr 我会将详细信息作为一个单独的问题发布,其中包含您用于编译的代码+命令行。 (您最初的问题是“我如何找到问题所在”,但现在是“我该如何解决这个问题”)
    • “仅仅从一个几乎空的项目中包含 sdl.h 就足以导致这种情况”我认为你应该去 em_sdk 工具并将你的 emscripten 编译器更新到最新的 master 分支,并使用“clear缓存”功能,以确保它从源代码重建其缓存版本的 SDL。如果您确实对(提供 emscripten 的)SDL 包有问题,我认为这是一个您可以向 alon 报告的错误
    • @ChrisBeck 我会这样做的
    【解决方案2】:

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

    【讨论】:

    • 我建议编辑“这发生在什么时候”-->“这也可以在什么时候发生”。因为对我来说,这不是因为记忆,而是因为 Michal Charemza 的回答中提到的原因。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-25
      • 1970-01-01
      相关资源
      最近更新 更多