2012-06-20 7 views
7

zu erhalten Ich habe verschiedene Quellen online durchgesehen und eine Reihe von Google-Suchen durchgeführt, aber ich kann keine spezifischen Anweisungen finden, wie ich arbeite mit den V8 --trace- * Flags in Google Chrome. Ich habe ein paar gesehen "Sie können dies auch in Chrome tun", aber ich konnte nicht finden, wonach ich suche, was wie folgt ausgegeben wird: (Snippets sind in der Nähe des unteren Rands des Posts) Optomizing for V8.Verwenden von --js-Flags in Google Chrome, um --trace output

Ich fand Hinweis, dass die Daten in einer Datei protokolliert: Profiling Chromium with V8 und ich habe festgestellt, dass die Datei wahrscheinlich v8.log benannt: (Passwort, dass Link), aber ich habe keine Hinweise darauf, wie gefunden zu erzeugen diese Datei oder wo sie sich befindet. Es scheint nicht in dem Chrome-Verzeichnis oder dem Benutzerverzeichnis zu sein.

Offenbar muss ich .map-Dateien für chrome.dll auch aktivieren, aber ich konnte nichts finden, um mir dabei zu helfen. Der Grund, warum ich Chrome's V8 lieber dafür verwenden würde, als V8 zu bauen und eine Shell zu verwenden, liegt daran, dass das JavaScript, das ich testen möchte, DOM verwendet, von dem ich glaube, dass es in der V8-Shell nicht enthalten wäre . Aber wenn es das ist, wäre es toll zu wissen, dann kann ich den Code neu schreiben, um die sans-html-Datei zu bearbeiten und zu testen. Aber meine Vermutung ist, dass V8 selbst ist Sans-DOM-Zugang, wie node.js

Also, um Dinge zusammenzufassen;

  • Lauf Google Chrome Canary auf Windows 7 Ultimate x64
  • Shortcut Ziel ist "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
  • Suche nach, ob this Ausgabetyp kann
    • Wenn ja aus Chrom eingeloggt sein, wo würde das Protokoll sein ?
    • Wenn nicht, welche Art von Ausgabe sollte ich erwarten, und wieder, wo könnte ich es finden?

Vielen Dank für jede Hilfe!

Änderung mit, wie ich die Antwort für mich zu arbeiten

die unten Antwort verwenden, installierte ich Python ist es Standardverzeichnis, und modifiziert das Skript so dass es den vollständigen Pfad musste Chrom. Von dort habe ich Dateitypzuordnungen zu .py-Dateien zu python gesetzt und das Skript ausgeführt. Jetzt jedes Mal, wenn ich Chrome Canary öffne, wird dieses Python-Skript ausgeführt (zumindest bis ich meinen PC neu starte, dann muss ich das Skript erneut ausführen)

Das Ergebnis ist genau das, was ich gesucht habe!

Antwort

10

Unter Windows wird die Ausgabe von stdout durch die Tatsache unterdrückt, dass chrome.exe eine GUI-Anwendung ist. Sie müssen das Subsystem-Feld im PE-Header von IMAGE_SUBSYSTEM_WINDOWS_GUI zu WINDOWS_SUBSYSTEM_WINDOWS_CUI umblättern, um zu sehen, was V8 auf stdout ausgibt.

Sie können es mit dem folgenden (etwas hackish) Skript 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) 

Schließen Sie alle Chrome-Instanzen und dieses Skript ausführen. Wenn Sie Chrome.exe neu starten, sollte das Konsolenfenster angezeigt werden und Sie können stdout über > umleiten.

+0

ich über Python nicht sehr gut informiert bin, aber das Skript über 'läuft "C: \ Python27 \ python.exe" chromeDebug.py' gibt ein IOError:' IOError: [Errno 2] Keine solche Datei oder kein Verzeichnis: "chrome.exe". Würde die Lösung darin bestehen, "chrome.exe" in den vollständigen Pfad zu ändern? – ArkahnX

+0

Ja, ich habe den vollständigen Pfad zu chrome.exe nicht angegeben. Ich würde es nur in dem Verzeichnis ausführen, in dem sich chrome.exe befindet. neben Chrome –

+0

(läuft als admin) Ich kann es in einer Datei "bastard.py" setzen, aber ich Traceback (jüngste Aufforderung zuletzt): File "bastard.py", Zeile 8, in mit offenem (“ chrome.exe "," r + b ") wie f: IOError: [Errno 13] Berechtigung verweigert: 'chrome.exe' – Pawel

4

Wenn Sie nicht daran interessiert sind, den PE-Eintrag von Chrome zu hacken, dann gibt es eine Alternative für Windows.

Da die Chrome-App keine Konsolen-Standardausgabe unter Windows erstellt, werden alle Ablaufverfolgungen in Version 8 (auch d8-Compiler) an den OutputDebugString gesendet. Der OutputDebugString schreibt in ein gemeinsam genutztes Speicherobjekt, das von jeder anderen Anwendung gelesen werden kann.

Microsoft hat ein Tool namens DebugView, das überwacht und bei Bedarf auch in eine Protokolldatei streamen kann.

Debugview kostenlos und Herunterladen von Microsoft ist: http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx

+1

Könnten Sie Schritt für Schritt erklären, was ich tun muss, damit es funktioniert? Ich habe versucht, + R '" C: \ Programme (x86) \ Google \ Chrome \ Anwendung \ chrome.exe "zu gewinnen --js-flags =" - trace-opt --trace-deopt "' und dann I ' Führen Sie die debugview.exe aus, aber ich bin mir nicht sicher, was ich als nächstes tun soll, um die Ausgabe zu sehen. – qbolec

+0

Die Verwendung von dbgview funktioniert mit 'chrome.exe --no-sandbox --benutzerdatenverzeichnis = c: \ temp --js-flags =" - trace-opt --trace-deopt "', aber die Ausgabe in dbgview ist im Vergleich zur Ausgabe auf stdout sehr unvollständig. Es sieht so aus, als ob in den Nachrichten einige Variablenersatzdaten fehlen. –