2012-06-20 12 views
7

Ho controllato varie fonti online e ho effettuato numerose ricerche su Google, ma non riesco a trovare istruzioni specifiche su come lavorare con i flag V8 --trace- * in Google Chrome. Ne ho visti alcuni "Puoi farlo anche in Chrome", ma non sono stato in grado di trovare quello che sto cercando, il cui output è il seguente: (i frammenti sono vicini al fondo del post) Optomizing for V8.Utilizzo di --js-flags in Google Chrome per ottenere --trace output

Ho trovato riferimento al fatto che i dati sono registrati in un file: Profiling Chromium with V8 e ho trovato che il file è probabilmente chiamato v8.log: (Ho perso quel collegamento) ma non ho trovato alcun indizio su come generare quel file o dove si trova. Non sembra essere nella directory chrome o nella directory dell'utente.

A quanto pare ho bisogno di abilitare i file .map per chrome.dll, ma non sono riuscito a trovare nulla che mi aiuti in questo.

Il motivo per cui preferirei utilizzare il V8 di Chrome per questo invece di costruire V8 e usare una shell è perché il codice JavaScript che vorrei testare fa uso di DOM, che non credo sarebbe incluso nella shell V8 . Tuttavia, se lo fosse, sarebbe bello saperlo, quindi posso riscrivere il codice per lavorare con il file sans-html e testarlo. Ma suppongo che V8 sia di per sé un accesso sans-DOM, come node.js

Quindi per riassumere le cose;

  • esecuzione di Google Chrome Canary su Windows 7 x64 ultimo
  • bersaglio di scelta rapida è "C:\Users\ArkahnX\AppData\Local\Google\Chrome SxS\Application\chrome.exe" --no-sandbox --js-flags="--trace-opt --trace-bailout --trace-deop" --user-data-dir=C:\chromeDebugProfile
  • ricerca di se this tipo di uscita può essere registrato da cromo
    • Se è così, dove sarebbe il registro essere ?
    • In caso negativo, che tipo di output dovrei aspettarmi, e ancora, dove potrei trovarlo?

Grazie per qualsiasi tipo di assistenza!

che modifica, per quanto ho avuto la risposta a lavorare per me

Usando la risposta qui sotto, ho installato python alla sua directory di default, e modificato lo script in modo che aveva il percorso completo a Chrome. Da lì ho impostato associazioni di tipi di file in file .py a python ed eseguito lo script. Ora ogni volta che apro Chrome Canary verrà eseguito lo script python (almeno fino a quando non riavvio il mio pc, quindi dovrò eseguire nuovamente lo script)

Il risultato è esattamente quello che stavo cercando!

risposta

10

L'output di stdout di Windows viene eliminato dal fatto che chrome.exe è un'applicazione GUI. È necessario capovolgere il campo Sottosistema nell'intestazione PE da IMAGE_SUBSYSTEM_WINDOWS_GUI a WINDOWS_SUBSYSTEM_WINDOWS_CUI per vedere quale uscita V8 su stdout.

Puoi farlo con il seguente (un po 'hacker) script Python:

import mmap 
import ctypes 

GUI = 2 
CUI = 3 

with open("chrome.exe", "r+b") as f: 
    map = mmap.mmap(f.fileno(), 1024, None, mmap.ACCESS_WRITE) 
    e_lfanew = (ctypes.c_uint.from_buffer(map, 30 * 2).value) 
    subsystem = ctypes.c_ushort.from_buffer(map, e_lfanew + 4 + 20 + (17 * 4)) 
    if subsystem.value == GUI: 
     subsystem.value = CUI 
     print "patched: gui -> cui" 
    elif subsystem.value == CUI: 
     subsystem.value = GUI 
     print "patched: cui -> gui" 
    else: 
     print "unknown subsystem: %x" % (subsystem.value) 

Chiudere tutte le istanze Chrome ed eseguire questo script. Al riavvio di chrome.exe dovresti visualizzare la finestra della console e dovresti essere in grado di reindirizzare lo stdout tramite >.

+0

io non sono molto ben informato Python, ma l'esecuzione dello script tramite ' "C: \ Python27 \ python.exe" chromeDebug.py' dà un IOError:' IOError: [Errno 2] Nessun file o directory di questo tipo: 'chrome.exe''. La soluzione sarebbe cambiare "chrome.exe" sul percorso completo? – ArkahnX

+0

Sì, non ho specificato il percorso completo per chrome.exe; Lo eseguirò semplicemente nella stessa directory in cui si trova chrome.exe. –

+0

(in esecuzione come amministratore) Lo metto in un file "bastard.py" accanto a Chrome ma ottengo Traceback (ultima chiamata ultima): File "bastard.py", riga 8, in con open (" chrome.exe "," r + b ") come f: IOErrore: [Errno 13] Autorizzazione negata: 'chrome.exe' – Pawel

4

Se non siete interessati a hackerare la voce PE di chrome, allora c'è un'alternativa per Windows.

Poiché l'app di Chrome non crea uno stdout di console su Windows, tutta la traccia in v8 (anche il compilatore d8) viene invece inviata a OutputDebugString. OutputDebugString scrive su un oggetto memoria condivisa che può essere letto da qualsiasi altra applicazione.

Microsoft ha uno strumento chiamato DebugView che monitora e, se necessario, esegue lo streaming su un file di registro.

DebugView è gratuito e scaricabile da Microsoft: http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx

+1

Potresti spiegare passo dopo passo cosa devo fare per farlo funzionare? Ho provato a vincere + R '" C: \ Programmi (x86) \ Google \ Chrome \ Application \ chrome.exe "--js-flags =" - trace-opt --trace-deopt "' e poi I ' Ho eseguito il debugview.exe, ma non sono sicuro di cosa fare per vedere l'output. – qbolec

+0

Utilizzo di dbgview funziona con 'chrome.exe --no-sandbox --user-data-dir = c: \ temp --js-flags =" - trace-opt --trace-deopt "', ma l'output in dbgview è molto incompleto rispetto all'output su stdout. Sembra che nei messaggi non manchino alcuni dati di sostituzione variabili. –

Problemi correlati