问题标签 [embedded-v8]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3412 浏览

c++ - 如何迭代对象中的属性

我想遍历 V8 C++ 函数中的对象。

节点JS:

我想将“用户”和“密码”,名称和值传递给 C++ 方法,该方法采用以下参数:

名称/值对的数量可能不同,所以我需要一个通用的解决方案。

我能不能得到一些帮助才能走上正轨。

我一直在为 Node 和 V8 编写更简单的 C++ 包装器,但我对这个的想法已经不多了 :)

0 投票
0 回答
544 浏览

android - 调用函数时出现 V8 段错误 - 我做错了什么?

我有一个非常旧的 V8 预构建版本,通过 JNI 集成到 Android NDK 中运行良好,一切都很好。

我决定将 V8 升级到更新的代码(4.1.0.22),在 Ubuntu 上构建我自己的 ARM 存档文件,并保持我自己的架构不变,我已经重构了代码,因为 V8 代码库的更改显然需要。

但是,它崩溃了。

与一些更简单的示例相比,我想要构造它的方式可能不同寻常,是拥有一个持久的 V8 实例,我可以初始化一次,然后再进行多次调用。每个调用都提供 Javascript 代码内容和方法名称(通常是“main”)。

所以,这实际上是我的初始化代码,运行一次:

V8Resources上面的对象是周围的东西。据我所知,这段代码工作正常。

然后在一段时间后调用的“运行脚本”方法中,我有这个:

通过日志记录确定,这会在 SIGSEGV 处爆炸js_func->Call,并且在我有任何有用的范围内,提供此堆栈跟踪:

我已经对此进行了相当多的尝试-包括不同的 TryCatch 模式-但无济于事,而且我不相信我实际上正在适当地使用 V8。

这个描述有什么明显的错误吗?

0 投票
2 回答
1179 浏览

c++ - 预编译 v8 脚本以用于多个隔离

我已经使用嵌入式 v8 实现了一个类似“require”的函数,它加载一个 JavaScript 文件并执行它,但是因为我的程序有多个线程,因此每个线程都有自己的隔离,我必须单独加载和编译文件在指定相同源的每个线程中。如果可能的话,我想以某种方式缓存任何已编译的脚本,以便如果另一个线程(使用另一个隔离)碰巧想要相同的文件,我可以利用某种预编译格式,并只给它运行脚本,而不是必须在需要相同文件的每个隔离内部单独编译它。

0 投票
1 回答
582 浏览

c++ - “InitializeBuiltinTypedArrays”上的 V8“Hello World”段错误

此代码在 Windows/Visual Studio 上运行良好,但在 Ubuntu/GCC 上出现段错误。为什么?

我已将 V8 4.5.8 编译为共享库。我已将以下代码放入 CPPUNIT 测试中。

此测试使用以下堆栈出现段错误。这个堆栈的大部分是 CppUnit 和封闭的测试可执行文件。

为什么我会出现段错误,我该如何解决?

我成功的 Windows 构建使用 V8 4.5.8、Windows 8.1、Visual Studio 2013。我不成功的 Ubuntu 构建使用 GCC 4.8.2、Ubuntu 14.04.2。

0 投票
1 回答
277 浏览

c++ - 我应该如何使用 v8::SetNativesDataBlob?

GetBuiltinsCount调查我的代码中的段错误,在V8 源代码中查找导致我得到以下评论:

我应该如何使用嵌入器v8::SetNativesDataBlob

d8 解释器确实调用了这个方法,但根本不清楚它在做什么以及为什么。基本示例不调用此方法。

0 投票
3 回答
1439 浏览

c++ - 从具有非 ASCII 字符的 wchar_t 创建 v8::String 的安全方法是什么?

我正在为DAB 开发板编写 Node.js 前端,最终将在 Raspberry Pi 上运行。我是一名 Java 和 Web 开发人员,我正在努力使用 C++ 并在不同类型的字符串之间进行转换。

DAB 板带有一个 C++ SDK,具有许多方便的功能。它允许我使用GetTotalProgram(). 对于我可以调用GetProgramName以获取程序名称的每个程序:

... 其中mode表示FMor DABnamemode表示长名或短名。该程序的名称将在 中返回programName

为了将 转换wchar_t *programNamev8::String,我找到了我正在使用的这个片段,并了解以下基础知识:

我遍历可用的程序并建立一个v8::Array

我从我的 Node 应用程序中调用 C++ 方法:

这主要是可行的,但是当程序的名称包含非 ASCII 字符时,例如Æ, Ø, Å,ARRAY 中的下一个元素有一个 borked name

console.log与预期输出相比,这是 Node 片段实际输出 ( ) 的内容:

似乎非 ASCII 字符会导致下一个wcstombs提前退出,而不是复制后面的字符。

为什么会这样?有没有更好的方法来创建v8::String我的wchar_t

注意: 我现在已经能够将此问题隔离到wcstombs在 Raspberry Pi 上运行时的方法。以下代码:

在 Mac 上运行时,输出
wcslen of wchar_t array: 10 - strlen of char array: 10
但在 Raspberry 上运行时,输出
wcslen of wchar_t array: 10 - strlen of char array: 3- 也就是说,它只计算字符之前的ø字符

这看起来类似于这个未回答的问题

0 投票
1 回答
2469 浏览

c++ - C++ 范围和 Google V8 脚本上下文

我有以下用 C++ 编写的几乎可以工作的代码:

我有函数 setupJs() 设置了 v8 环境,并且 callJs 应该被多次调用(在工作时,javascript 脚本每次将 var a 递增一)。

如果我把

在 setupJs 中,我可以看到如何调用函数并打印“1”。但是,如果我将函数调用与稍后调用的不同函数一起保留,我会在该行出现 SegfaultHandle<Value> js_result = jsUpdateFunc->Call(jsGlobal, 0, args);

我已经检查过,jsUpdateFunc 和 jsGlobal 都是非空指针

0 投票
1 回答
1313 浏览

c++ - Chrome V8 引擎选项

我知道 Chrome V8 引擎有一些选项可以使用v8::V8::SetFlagsFromString(). 但是我在哪里可以找到每个标志的描述?到目前为止,我没有成功通过谷歌搜索此信息。有谁知道描述 V8 标志的文档或其他资源中的位置?

0 投票
0 回答
76 浏览

node.js - 如何更改在调试模式下可见的默认行数?

它仅显示当前语句之前和之后的 2 行。每次按 n(下一个)或 c(继续)时,我都想更改行数。引用文档的函数 list(n) 说:

list(5) - 列出带有 5 行上下文的脚本源代码(前后 5 行)

调试信息 - NodeJS

例如执行:

每次进行语句时,我都想更改默认数字。或者,最好的方法是什么?

0 投票
2 回答
316 浏览

c++ - V8 编译器错误

我最近设法为 V8 生成了 Visual Studio 项目文件,但它无法编译

当我编译All解决方案时,它可能会花费大约 10 分钟的时间进行编译,然后出现一堆错误(至少在发布模式下,准确地说是 35)。

例子:

为什么编译不正确?