問題タブ [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.
android - 関数を呼び出すときの V8 segfault - 何が間違っていますか?
非常に古いバージョンのビルド済みの V8 があり、JNI を介して Android NDK に統合されてうまく動作しましたが、すべて問題ありませんでした。
私は V8 をより新しいコード (4.1.0.22) にアップグレードし、Ubuntu で独自の ARM アーカイブ ファイルを構築し、独自のアーキテクチャを同じに保ち、V8 コードベースの変更で明らかに必要とされるようにコードをリファクタリングしました。
ただし、クラッシュします。
これを構築したい方法は、おそらくいくつかの単純な例と比較すると異常ですが、永続化された V8 インスタンスを使用して、一度初期化し、後で複数の呼び出しを行うことができるようにすることです。各呼び出しは、Javascript コードの内容とメソッド名 (通常は「main」) を提供します。
したがって、これは実質的に私の初期化コードであり、一度実行します。
上記の私のV8Resources
オブジェクトは、ぶらぶらしているものです。私が知る限り、このコードは問題なく動作します。
次に、しばらくして呼び出される「スクリプトの実行」メソッドで、次のようにします。
ロギングを介して決定すると、これは で SIGSEGV で爆発し、js_func->Call
有用なものがある限り、次のスタック トレースを提供します。
さまざまなTryCatchパターンを含め、これをかなりいじりましたが、どこにも行けず、実際にV8を適切に使用していると確信していません.
この説明に明らかに間違っている点はありますか?
c++ - "InitializeBuiltinTypedArrays" での V8 "Hello World" Segfault
このコードは 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 を使用しています。
c++ - 非ASCII文字を含むwchar_tからv8::Stringを作成する安全な方法は何ですか?
最終的に Raspberry Pi で実行されるDAB 開発ボード用の Node.js フロントエンドを作成しています。私は Java と Web の開発者で、C++ とさまざまなタイプの文字列間の変換に苦労しています。
DAB ボードには、多数の便利な機能を備えた C++ SDK が付属しています。で利用可能なプログラムの数を取得できますGetTotalProgram()
。GetProgramName
プログラムの名前を取得するために呼び出すことができるプログラムごとに、次のようにします。
...ここで、またはをmode
意味し、長い名前または短い名前を意味します。プログラムの名前は に返されます。FM
DAB
namemode
programName
を に変換するために、wchar_t *programName
使用v8::String
しているこのスニペットを見つけ、次の基本を理解しました。
利用可能なプログラムを反復処理し、以下を構築しますv8::Array
。
Node アプリから C++ メソッドを呼び出します。
Æ
これはほとんどの場合機能しますが、プログラムの名前に, Ø
,のような非 ASCII 文字が含まれている場合、ARRAYÅ
の次の要素の名前は壊れています。
console.log
予想される出力と比較して、Node スニペットが実際に出力するもの ( ) は次のとおりです。
非ASCII文字により、次の文字がwcstombs
コピーされずに、次の文字が早期に終了するようです。
なぜこれが起こるのですか?v8::String
my からを作成するより良い方法はあり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
のみをカウントします。ø
これは、この未回答の質問に似ています。
c++ - C++ スコープと Google V8 スクリプト コンテキスト
私は次の、C ++で書かれたほとんど機能するコードを持っています:
関数 setupJs() で v8 環境をセットアップし、callJs が複数回呼び出されることになっています (作業中、javascript スクリプトは毎回 var a を 1 ずつインクリメントします)。
私が入れたら
setupJs では、関数がどのように呼び出され、「1」が出力されるかを確認できます。しかし、後で呼び出される別の関数を関数呼び出しのままにしておくと、その行に Segfault が発生しますHandle<Value> js_result = jsUpdateFunc->Call(jsGlobal, 0, args);
私が確認したところ、jsUpdateFunc と jsGlobal の両方が非 null ポインターです。
node.js - デバッグモードで表示されるデフォルトの行数を変更するには?
現在のステートメントの前後の 2 行だけを示しています。n(次へ)またはc(続行)を押すたびに行数を変更したいと思います。関数 list(n) は、ドキュメントを引用して、次のように述べています。
list(5) - スクリプト ソース コードを 5 行のコンテキスト (前後 5 行) で一覧表示します。
たとえば、次のように実行します。
ステートメントに移動するたびにデフォルトの番号を変更したいと考えています。または、それを行うための最良の方法であるという意見はありますか?
c++ - V8 コンパイラ エラー
最近、V8 用の Visual Studio プロジェクト ファイルを生成できましたが、コンパイルされません。
ソリューションをコンパイルすると、コンパイルにAll
約 10 分かかり、その後、一連のエラーが表示されます (少なくともリリース モードでは、正確には 35)。
例:
正しくコンパイルされないのはなぜですか?