2012-06-20 2 views
7

Я просмотрел различные источники в Интернете и выполнил ряд поисков Google, но я не могу найти никаких конкретных инструкций о том, как работать с флагами V8 --trace- * в Google Chrome. Я видел несколько «вы можете это сделать и в Chrome», но мне не удалось найти то, что я ищу, которое выводится следующим образом: (фрагменты находятся рядом с нижней частью сообщения) Optomizing for V8.Использование -js-флагов в Google Chrome для получения вывода -trace

Я нашел ссылку, что данные записываются в файл: Profiling Chromium with V8, и я обнаружил, что файл, скорее всего, назван v8.log: (потерял эту ссылку), но я не нашел никаких подсказок о том, как сгенерировать этот файл или где он находится. Он не отображался в каталоге chrome или в каталоге пользователя.

По-видимому, мне нужно также включить файлы .map для chrome.dll, но я не смог найти ничего, чтобы помочь мне в этом.

Причина, по которой я бы предпочел использовать V8 Chrome для этого, в отличие от сборки V8 и использования оболочки, заключается в том, что JavaScript, который я хотел бы протестировать, использует DOM, который, как я полагаю, не будет включен в оболочку V8 , Однако, если это так, это было бы здорово узнать, тогда я могу переписать код для работы sans-html-файла и теста. Но я предполагаю, что V8 сам по себе является доступом sans-DOM, например node.js

Итак, чтобы подвести итог;

  • Запуск Google Chrome Canary на Windows 7 Ultimate x64
  • целевого ярлыка "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
  • Ищет ли this типа вывода может быть авторизован из хрома
    • Если да, то где бы журнал ?
    • Если нет, какой выходной результат я должен ожидать, и снова, где я могу его найти?

Спасибо за любую помощь!

внесения изменений и дополнения с тем, как я получил ответ на работу для меня

Используя ответ ниже, я установил питон это каталог по умолчанию, и изменить сценарий так, он имел полный путь к хрому. Оттуда я установил ассоциации типов файлов на .py-файлы на python и выполнил сценарий. Теперь каждый раз, когда я открываю Chrome Canary, он запускает этот сценарий python (по крайней мере, до тех пор, пока я не перезапущу свой компьютер, тогда мне придется снова запустить этот скрипт)

Результат - именно то, что я искал!

ответ

10

На выходе вывода stdout Windows подавляется тот факт, что chrome.exe является графическим приложением. Вам нужно перевернуть поле подсистемы в PE-заголовке от IMAGE_SUBSYSTEM_WINDOWS_GUI до WINDOWS_SUBSYSTEM_WINDOWS_CUI, чтобы узнать, какие выходы V8 выходят на стандартный вывод.

Вы можете сделать это с помощью следующего (несколько хака) сценария 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) 

Закройте все экземпляры Chrome и выполнить этот сценарий. Когда вы перезапустите chrome.exe, вы увидите окно консоли, и вы сможете перенаправить stdout через >.

+0

Я не очень хорошо осведомлен о Python, но запустив скрипт с помощью ' "C: \ python27 \ python.exe" chromeDebug.py' дает оценку IOError:' IOError: [Errno 2] Нет такого файла или каталога: 'chrome.exe''. Будет ли решение изменить «chrome.exe» на полный путь? – ArkahnX

+0

Да, я не указал полный путь к chrome.exe; Я бы просто выполнил его в том же каталоге, где находится chrome.exe. –

+0

(работает как admin) Я помещал его в файл «bastard.py» рядом с Chrome, но получаю Traceback (последний последний звонок): Файл «bastard.py», строка 8, в с открытым (" chrome.exe "," r + b ") как f: IOError: [Errno 13] Разрешение отклонено: 'chrome.exe' – Pawel

4

Если вы не заинтересованы в взломе PE-записи хром, тогда есть альтернатива для окон.

Поскольку приложение chrome не создает консольный stdout для окон, все трассировки в v8 (также компилятор d8) отправляются вместо этого в OutputDebugString. OutputDebugString записывает объект общей памяти, который может быть прочитан любым другим приложением.

У Microsoft есть инструмент под названием DebugView, который контролирует и при необходимости также передает поток в файл журнала.

DebugView бесплатно и скачать с Microsoft: http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx

+1

Не могли бы вы объяснить шаг за шагом, что мне нужно сделать, чтобы заставить его работать? Я попытался выиграть + R '" C: \ Program Files (x86) \ Google \ Chrome \ Application \ chrome.exe "--js-flags =" - trace-opt --trace-deopt ", а затем я ' вы запустите debugview.exe, но я не уверен, что делать дальше, чтобы увидеть результат. – qbolec

+0

Использование dbgview работает с 'chrome.exe --no-sandbox --user-data-dir = c: \ temp --js-flags =" - trace-opt -trace-deopt "', но вывод в dbgview очень неполный по сравнению с выходом на stdout. Похоже, в сообщениях отсутствуют данные переменной замещения. –

Смежные вопросы