2012-06-08 19 views
13

¿Puede node.js (o alguna otra interfaz v8 o envoltorio alrededor de v8) generar el ensamblaje generado desde el v8 JIT?Volcado v8 Salida JIT del nodo

Me gustaría ver cómo se ve el ensamblaje generado para varios fragmentos.

+0

He intentado esto, pero no da salida a nada: 'node --expose-debug-as = d -e" function f() {return 1;}; d.Debug.disassemble (f) " ' – slipheed

+0

¿hay algún fragmento en particular que le gustaría investigar? –

Respuesta

22

Debe asegurarse de que node.js esté construido con el desensamblador V8 habilitado. Las compilaciones de depuración lo habilitarán por defecto. Para las versiones de lanzamiento (en el nodo suficientemente reciente que utiliza la acumulación GYP) se puede activar haciendo:

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

y la reconstrucción de nodo.

Cuando se habilita desensamblador puede utilizar como banderas --print-code, --print-code-stubs, --print-opt-code y --code-comments de revisar el código generado por el motor V8.

Si desea investigar el IR utilizado optimizando el compilador, use --trace-hydrogen y mire hydrogen.cfg (se puede ver con C1 Visualizer).

+0

¿Esta información aún está actualizada? –

+1

@OleksiiRudenko sí, principalmente. ¿por qué? Actualmente, el nodo viene con un desensamblador habilitado por defecto tanto en versión como en depuración (https://github.com/nodejs/node/blob/master/common.gypi#L21). También recomiendo usar IRHydra (http://mrale.ph/irhydra/2) en lugar de C1 Visualizer, pero de lo contrario todos los indicadores son los mismos. –

+1

¡IRHydra se ve realmente genial! Gracias, es bueno saber que no necesito volver a compilar el nodo ahora. Me pregunto si IRHydra se integra con Benchmark.js? Quiero decir, ¿puede excluir el código irrelevante benchmark.js del análisis? ¿Y realmente tiene sentido capturar artefactos de compilación a partir de puntos de referencia directamente o tiene sentido crear ejemplos aislados? –