2017-03-19 4 views
0

J'ai compilé l'exemple v8_hello_world et il pourrait imprimer "hello world" dans la console. Je sais que V8 compile le JavaScript avec JIT, mais je veux imprimer le message détaillé tel que les instructions qu'il a compilées. Et je veux aussi connaître les types de ces instructions, alors que dois-je faire?Comment imprimer les instructions compilées dans un moteur V8?

Merci beaucoup ~

Répondre

1

En fonction du type (s) de code généré qui vous intéresse, vous devez passer le drapeau correspondant (s) à V8:

  • --print-code imprime code machine non optimisé (créée par "full codegen", le compilateur unoptimizing)
  • --print-bytecode imprime bytecode (créé par l'interpréteur "d'allumage")
  • --print-opt-code gravures optimisées code machine (ACI soit par les compilateurs d'optimisation "Crankshaft" ou "TurboFan")

Ces indicateurs (et beaucoup d'autres) sont documentés par --help. Étant donné que des modifications majeures du pipeline d'exécution sont en cours, en fonction de la version de V8 que vous utilisez, vous pouvez voir la même fonction compilée par différents compilateurs.

Si vous utilisez le shell de développeur d8, vous pouvez passer ces indicateurs directement sur la ligne de commande. Dans votre propre application d'intégration, vous pouvez utiliser v8::V8::SetFlagsFromCommandLine pour passer les codes argc et argv à V8. Dans d8.cc, vous pouvez voir un exemple pour savoir comment gérer vous-même certains drapeaux et transmettre les autres à la V8.

+0

Merci beaucoup !! Cela m'aide beaucoup! – Oceanisher

+0

@jmrk Je suis un peu confus. qu'est-ce que l'hydrogène et le lithium? J'ai lu à leur sujet l'article http://www.mattzeunert.com/2015/08/19/viewing-assembly-code-generated-by-v8.html –

+1

@DineshRavi: Ce sont les noms internes de haut niveau et des représentations intermédiaires de bas niveau du compilateur d'optimisation "Crankshaft". Il a depuis été remplacé par "Turbofan". – jmrk