2012-06-08 9 views
13

Can node.js (o qualche altra interfaccia v8 o wrapper attorno alla v8) restituisce l'assembly generato dal JIT v8?Dump v8 Uscita JIT dal nodo

Mi piacerebbe vedere l'aspetto dell'assemblaggio generato per vari frammenti.

+0

Ho provato questo, ma non emette nulla: 'node --expose-debug-as = d -e" function f() {return 1;}; d.Debug.disassemble (f) " ' – slipheed

+0

c'è uno snippet particolare che vorresti indagare? –

risposta

22

È necessario assicurarsi che node.js sia stato creato con il disassemblatore V8 abilitato. Le build di debug lo abiliteranno per impostazione predefinita. Per build di rilascio (in nodo abbastanza recente che utilizza GYP build) è possibile attivarla facendo:

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

e la ricostruzione del nodo.

Quando disassembler è abilitata è possibile utilizzare le bandiere come --print-code, --print-code-stubs, --print-opt-code e --code-comments di controllare il codice generato da V8.

Se si desidera esaminare l'IR utilizzato dall'ottimizzazione del compilatore, utilizzare --trace-hydrogen e cercare hydrogen.cfg (può essere visualizzato con C1 Visualizer).

+0

Queste informazioni sono ancora aggiornate? –

+1

@OleksiiRudenko sì, soprattutto. perché? Il nodo di questi giorni è dotato di disassemblatore abilitato di default sia in versione che in debug (https://github.com/nodejs/node/blob/master/common.gypi#L21). Inoltre, ti consiglio di usare IRHydra (http://mrale.ph/irhydra/2) invece di C1 Visualizer - ma altrimenti tutti i flag sono gli stessi. –

+1

IRHydra sembra davvero bello! Grazie, è bello sapere che non ho bisogno di ricompilare il nodo ora. Mi chiedo se IRHydra si integra con Benchmark.js? Voglio dire può escludere il codice benchmark.js irrilevante dall'analisi? E ha davvero senso catturare direttamente gli artefatti di compilazione dai benchmark o ha senso creare esempi isolati? –