2012-06-08 7 views
13

Kann node.js (oder eine andere v8-Schnittstelle oder ein Wrapper um v8) die generierte Assembly vom v8 JIT ausgeben?Dump v8 JIT-Ausgabe vom Knoten

Ich würde gerne sehen, wie die generierte Assembly für verschiedene Schnipsel aussieht.

+0

Ich habe es versucht, aber es gibt nichts aus: 'node --expose-debug-as = d -e" Funktion f() {return 1;}; d.Debug.disassemble (f) " ' – slipheed

+0

Gibt es ein bestimmtes Snippet, das Sie untersuchen möchten? –

Antwort

22

Sie müssen sicherstellen, dass node.js mit V8 Disassembler aktiviert ist. Debugbuilds werden standardmäßig aktiviert. Für die Freigabe (in den letzten genügend Knoten, GYP Build verwendet) baut können Sie es, indem Sie aktivieren:

GYP_DEFINES="v8_enable_disassembler=1 v8_object_print=1" ./configure 

und Wiederaufbau Knoten.

Wenn Disassembler aktiviert Sie Flags wie --print-code, --print-code-stubs, --print-opt-code und --code-comments zu prüfen, den Code generiert durch V8 verwenden können.

Wenn Sie IR untersuchen möchten, das durch Optimieren des Compilers verwendet wird, verwenden Sie --trace-hydrogen und sehen Sie sich hydrogen.cfg an (es kann mit C1 Visualizer betrachtet werden).

+0

Sind diese Informationen immer noch aktuell? –

+1

@OleksiiRudenko ja, meistens. Warum? Heutzutage ist der Knoten mit Disassembler ausgestattet, der standardmäßig sowohl in Release als auch in Debug aktiviert ist (https://github.com/nodejs/node/blob/master/common.gypi#L21). Außerdem empfehle ich IRHydra (http://mrale.ph/irhydra/2) anstelle von C1 Visualizer - aber ansonsten sind alle Flags gleich. –

+1

IRHydra sieht wirklich cool aus! Danke, es ist gut zu wissen, dass ich Knoten jetzt nicht neu kompilieren muss. Ich frage mich, ob IRHydra in Benchmark.js integriert ist? Ich meine, kann es irrelevante benchmark.js Code aus der Analyse ausschließen? Und macht es wirklich Sinn, Kompilationsartefakte direkt aus Benchmarks zu erfassen oder isolieren zu können? –