Как я могу напечатать машинный код переводчика V8? - PullRequest
0 голосов
/ 12 ноября 2018

Допустим, у меня есть функция и вызов функции, как показано ниже:

function foo(i, j) {
  return i + j;
}

foo(1, 2);

В настоящее время я могу напечатать байт-коды, которые генерирует интерпретатор, с флагом «--print-bytecode», как показано ниже.

$v8/out/x64.release/d8 --print-bytecode foo.js

Что меня действительно интересует в машинном коде, который печатается на уровне процессора (я не уверен, возможно ли это даже для уровня интерпретатора, поэтому, пожалуйста, дайте мне знать, если это не так), который я могу получить информация указателя инструкций для отладки на уровне источника и информация о регистре.

Кроме того, я где-то читал, что я могу активировать отладчик, например, GDB, с помощью d8 (не JIT GDB), я не совсем уверен, как его активировать. У кого-нибудь есть предложения по вышеуказанным двум проблемам?

Заранее спасибо.

1 Ответ

0 голосов
/ 12 ноября 2018

V8 разработчик здесь. Я не совсем уверен, что правильно понимаю, что вы просите, но я думаю, что ответ «это невозможно». Интерпретатор не является компилятором, поэтому он не генерирует машинный код для ваших функций, а только байт-код. Байт-код «исполняется» / интерпретируется так называемыми «обработчиками байт-кода», но они не являются специфическими для функции: один и тот же байт-код всегда обрабатывается одним и тем же обработчиком, который является частью двоичного кода V8. Вы можете распечатать машинные инструкции для каждого обработчика, но это не поможет при любой «отладке на уровне источника».

Тем не менее, я не уверен, что вы подразумеваете под "отладкой на уровне исходного кода". Если вы хотите отлаживать программы JavaScript, я рекомендую использовать Chrome DevTools (или аналог другого браузера). Отладка V8 действительно предназначена для поиска ошибок в V8 ; использование низкоуровневых идей V8 для проверки переменных JavaScript или установки точек останова JavaScript или чего-либо еще теоретически возможно, но на порядок сложнее, чем использование DevTools в браузере - я никогда не делал этого и не рекомендовал бы пытаться, потому что это не подходящий инструмент для работы.

активировать отладчик как gdb с помощью d8

Точно так же, как вы запускаете любую другую программу в GDB: gdb -args out/x64.debug/d8 foo.js, но смотрите выше: для отладки JavaScript это не поможет.

...