2012-06-20 15 views
7

Przeglądałem różne źródła w Internecie i wykonałem wiele wyszukiwań w Google, ale nie mogę znaleźć żadnych konkretnych instrukcji, jak pracować z flagami V8 --trace- * w Google Chrome. Widziałem kilka "Możesz to zrobić także w Chrome", ale nie udało mi się znaleźć tego, czego szukam, co jest takie: (fragmenty znajdują się w pobliżu dolnej części wpisu) Optomizing for V8.Używanie --js-flags w Google Chrome do uzyskiwania --trace output

Znalazłem odniesienia, że ​​dane są rejestrowane w pliku: Profiling Chromium with V8 i znalazłem, że plik jest prawdopodobnie nazwany v8.log: (utracił ten link), ale nie znalazłem żadnych wskazówek, jak wygenerować ten plik lub jego lokalizację. Wygląda na to, że nie znajduje się w katalogu chrome lub katalogu użytkownika.

Najwyraźniej muszę włączyć pliki .map dla chrome.dll, ale nie byłem w stanie znaleźć niczego, co mogłoby mi w tym pomóc.

Powodem, dla którego wolałbym używać V8 w Chrome, zamiast budować V8 i używać powłoki, jest to, że JavaScript, który chciałbym przetestować, korzysta z DOM, którego, jak sądzę, nie będzie zawarte w powłoce V8 . Jeśli jednak jest, świetnie byłoby wiedzieć, to mogę przepisać kod do pliku sans-html i przetestować. Ale domyślam się, że V8 samo w sobie jest dostępem sans-DOM, jak node.js

Podsumowując;

  • Running Google Chrome Canary na Windows 7 Ultimate x64
  • cel Skrót jest "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
  • Szukasz czy this typ wyjścia mogą być rejestrowane z chrom
    • jeśli tak, to gdzie dziennik byłby ?
    • Jeśli nie, jakiego rodzaju wyników należy się spodziewać, i znowu, gdzie mogę go znaleźć?

Dziękujemy za pomoc!

zmianie ze jak mam odpowiedź dla mnie pracować

Za pomocą poniższego odpowiedź, mam zainstalowany Python Jest to domyślny katalog, a zmodyfikowany skrypt więc miał pełną ścieżkę do Chrome. Stamtąd ustawiam skojarzenia plików z plikami .py na pythona i wykonuję skrypt. Teraz za każdym razem, gdy uruchamiam Chrome Canary, uruchamiam ten skrypt Pythona (przynajmniej do czasu ponownego uruchomienia komputera, wtedy będę musiał ponownie uruchomić ten skrypt)

Rezultat jest dokładnie taki, czego szukałem!

Odpowiedz

10

W przypadku wyjścia wyjściowego Windows stdout jest tłumione przez fakt, że chrome.exe jest aplikacją GUI. Musisz odwrócić pole Podsystemu w nagłówku PE od IMAGE_SUBSYSTEM_WINDOWS_GUI do WINDOWS_SUBSYSTEM_WINDOWS_CUI, aby zobaczyć, co wyprowadza V8 na standardowe wyjście.

Można to zrobić za pomocą następującego (nieco hackish) skrypt Pythona:

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) 

Zamknij wszystkie instancje Chrome i wykonać ten skrypt. Po ponownym uruchomieniu chrome.exe powinieneś zobaczyć okno konsoli i powinieneś być w stanie przekierować standardowe wyjście przez >.

+0

nie jestem dużą wiedzę o Pythonie, ale uruchomienie skryptu przez ' "C: \ Python27 \ python.exe" chromeDebug.py' daje IOError:' IOError: [Errno 2] Brak takiego pliku lub katalogu: "chrome.exe". Czy rozwiązaniem byłoby zmienić "chrome.exe" na pełną ścieżkę? – ArkahnX

+0

Tak, nie określiłem pełnej ścieżki do chrome.exe; Chciałbym po prostu wykonać go w tym samym katalogu, w którym znajduje się chrome.exe. –

+0

(działa jako administrator) Umieszczam go w pliku "bastard.py" obok Chrome, ale dostaję Traceback (ostatnie ostatnie połączenie): Plik "bastard.py", wiersz 8, w z otwartym (" chrome.exe "," r + b ") jako f: IOError: [Errno 13] Odmowa uprawnień:" chrome.exe " – Pawel

4

Jeśli nie chcesz hakować wejścia chromowanego z PE, istnieje alternatywa dla okien.

Ponieważ aplikacja chrome nie tworzy standardowej konsoli w systemie Windows, wszystkie operacje śledzenia w wersji 8 (również kompilator d8) są wysyłane do OutputDebugString. OutputDebugString zapisuje obiekt pamięci współużytkowanej, który może być odczytany przez dowolną inną aplikację.

Firma Microsoft ma narzędzie o nazwie DebugView, które monitoruje i w razie potrzeby również przesyła strumień do pliku dziennika.

DebugView jest wolny i do pobrania z Microsoft: http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx

+1

Czy możesz wyjaśnić krok po kroku, co muszę zrobić, aby to działało? Próbowałem wygrać + R "" C: \ Program Files (x86) \ Google \ Chrome \ Application \ chrome.exe "--js-flags =" - trace-opt --trace-deopt "", a następnie ja " ve uruchom plik debugview.exe, ale nie jestem pewien, co zrobić, aby zobaczyć wynik. – qbolec

+0

Używanie dbgview działa z 'chrome.exe --no-sandbox --user-data-dir = c: \ temp --js-flags =" - trace-opt --trace-deopt "', ale wynik w dbgview jest bardzo niekompletny w porównaniu z wyjściem na stdout. Wygląda na to, że w wiadomościach brakuje niektórych danych zastępujących zmienne. –

Powiązane problemy