为啥某些东西可能在节点中执行而不是在 REPL 中?

Posted

技术标签:

【中文标题】为啥某些东西可能在节点中执行而不是在 REPL 中?【英文标题】:Why might something execute in node but not in the REPL?为什么某些东西可能在节点中执行而不是在 REPL 中? 【发布时间】:2017-01-28 20:29:20 【问题描述】:

我有以下脚本:

const lib = require('./lib.js');
const fs = require('fs');

const graph = fs.readFileSync('../js-working-dir/add_graph.pb', 'utf8');
const sess = new lib.Session(graph);
const results = sess.run("a": 5, "b": 6, ["o"]);
console.log(results[0]);

(对于上下文lib.js 是一个编译的emscripten 模块;它相当大,大约40MB,否则我会上传它。)

当我在节点中执行此脚本时,它工作正常。但是,当我在 REPL(相同的工作目录和所有内容)中执行它时,我的代码会挂在 const sess = new lib.Session(graph); 上。

对为什么会出现这种情况有任何想法吗? Emscripten 是否以不同的方式对待 REPL 和节点执行?有什么方法可以调试卡住的地方吗?

非常感谢,

【问题讨论】:

如果有人有想法(只是因为它比较大),我宁愿不上传文件,但如果一天之内没有人有任何想法,我会想办法... 不知道什么会造成差异——在调用 Session 时通过在 lib.js 中添加日志来缩小差异会很困难吗? 现在可以试一试并报告,真是一个奇怪的错误,我想我必须遗漏一些明显的东西...... 【参考方案1】:

发现问题,似乎是 urandom 中的错误...

https://github.com/kripken/emscripten/issues/4905

【讨论】:

以上是关于为啥某些东西可能在节点中执行而不是在 REPL 中?的主要内容,如果未能解决你的问题,请参考以下文章

为啥链表使用指针而不是在节点内存储节点

C通过计时器触发任何功能作为单触发功能

节点 REPL:如何突破...?

为啥函数体在结构中编译,而不是在特征中?

为啥“ARFaceTrackingConfiguration.isSupported”语句在 AppDelegate 中,而不是在 ViewController 中?

为啥有些包可以在 Pip 中升级,而不是在 Conda 中? [复制]