2017-09-01 8 views
2

私は今v8を学習していますが、いくつかの問題が発生しました。 メソッドのC++実装をデバッグする場合、ブレークポイントをメモリ内のメソッドの開始アドレスに設定する方法。例: var a= new Array(0,1); a.indexOf(1) ;スライスの先頭にブレークポイントを設定したい、あるいは他の方法でアセンブラコードを追跡したいのですか?javascriptの実装をデバッグする方法V8で

snapshot.binという名前のファイルには、多くの機能が実装されています。私はこれらの関数の始めにブレークポイントを設定することはできません。

+0

間違った例を書いて申し訳ありません/ – cyril

答えて

0

ソースコードを確認し、sliceの実装を見つける必要があります。次に、.ccファイルにgdb/lldbブレークポイントを設定します。byiltins-typedarray.cc

多くの関数は、組み込み関数またはランタイム関数として定義されています。

+0

申し訳ありませんが、間違った例を書いてください。 snapshot.binという名前のファイルには、多くの機能が準拠しています。私はこれらの関数の始めにブレークポイントを設定することはできません。 – cyril

0

検査する機能の種類によって異なります。

スナップショット関連のデバッグの難しさを回避するために、スナップショットなしでコンパイルすることができます(起動をかなり遅くする:デバッグモードでは数秒かかる)。

それぞれのコードジェネレータを変更して、関数の先頭でブレーク命令を発行することができます。 Array.indexOfの例では、おそらく最も簡単な解決策です。 CodeStubAssembler命令はDebugBreak()と呼ばれます。

GDBを使用して別の場所に侵入したり、問題の機能を見つけたり(たとえばisolate-> builtins経由)、エントリのアドレスにブレークポイントを設定できます。

--print-*-codeフラグを使用して、stdoutにコードを出力することができます(コードを壊さずに使用できます)。

関連する問題