WebAssembly предоставляет возможность запускать, например, код C/C++ в Интернете со скоростью, близкой к исходной, и параллельно с JavaScript. В этом документе показано, как настроить и использовать Chrome DevTools для более эффективной отладки таких приложений.
После настройки DevTools вы сможете:
- Проверьте исходный код в разделе «Источники» > «Редактор» .
- Приостанавливайте выполнение с помощью точек останова на строке кода и просматривайте исходный исходный код C/C++, а не скомпилированный двоичный файл
.wasm
.
И во время паузы вы можете:
- Наведите указатель мыши на переменные в исходном файле и посмотрите их значения.
- Понимание имен функций в стеке вызовов и переменных в области видимости .
- Вывод глубоко вложенных свойств и сложных объектов в консоль .
- Проверьте память объекта с помощью Memory Inspector .
Настраивать
Чтобы включить отладку C/C++ WebAssembly в DevTools:
Скомпилируйте приложение, включив в него отладочную информацию DWARF . Запустите последнюю версию компилятора Emscripten и передайте ему флаг
-g
. Например:emcc -g source.cc -o app.html
Дополнительные сведения см. в разделе Создание проектов с использованием отладочной информации .
Установите расширение Chrome для поддержки C/C++ DevTools (DWARF) .
Отлаживать
После настройки DevTools отладьте свой код:
- Откройте DevTools , чтобы проверить свой веб-сайт. В этом уроке вы можете попробовать его на этой демонстрационной странице , которая была скомпилирована с обязательным флагом
-g
. - При желании сгруппируйте созданные вами файлы для упрощения навигации. В Источниках проверьте > Страница > > Группировать по созданным/развернутым .
- Выберите исходный файл из дерева файлов. В данном случае
mandelbrot.cc
. Чтобы установить точку останова на строке кода , щелкните номер строки в столбце слева от редактора , например, в строке 38.
Запустите код еще раз. Выполнение приостанавливается перед строкой с точкой останова.
Во время паузы попробуйте следующее:
- В разделе «Источники» > «Редактор» наведите указатель мыши на переменную, чтобы увидеть ее значение во всплывающей подсказке.
- В разделе «Источники» > «Стек вызовов» просмотрите имена функций в том виде, в каком они есть в исходном коде.
- В разделе «Источники» > «Область» просмотрите локальные и глобальные переменные, их типы и значения.
В Console выведите переменные и объекты, к которым сложно перейти в Scope :
- Глубоко вложенные переменные, например индексированные элементы в больших массивах.
- Сложные объекты, в том числе те, к которым можно получить доступ с помощью указателей (
->
). Разверните их для проверки.
- В разделе «Источники» > «Область» нажмите кнопку Значок, чтобы открыть инспектор памяти и проверить необработанные байты памяти объекта. Дополнительные сведения см. в разделе Проверка памяти WebAssembly .
Производительность профиля
Когда DevTools настроен и открыт, код, запускаемый Chrome, не оптимизирован. Он разделен на несколько уровней, чтобы вам было удобнее отлаживать.
В этом случае вы не можете полагаться на console.time()
и performance.now()
в своем коде для профилирования производительности. Вместо этого используйте панель «Производительность» для профилирования.
Альтернативно вы можете запустить код профилирования, не открывая DevTools, а затем открыть его, чтобы просмотреть сообщения в консоли .
Отделите отладочную информацию
Чтобы ускорить загрузку и при этом улучшить качество отладки, вы можете выделить отладочную информацию в отдельный файл .wasm
. Дополнительные сведения см. в разделе Ускоренная отладка WebAssembly .
Вы можете либо сохранить этот файл локально, либо разместить его на отдельном сервере. Чтобы сделать это с помощью Emscripten, передайте флаг -gseparate-dwarf=<filename>
и укажите путь к файлу:
emcc -g source.cc -o app.html \
-gseparate-dwarf=temp.debug.wasm \
-s SEPARATE_DWARF_URL=[file://local/path/to/temp.debug.wasm] | [URL]
Сборка и отладка на разных машинах
Если вы выполняете сборку на машине с другой операционной системой (контейнер, виртуальная машина или удаленный сервер), чем на машине, на которой вы запускаете Chrome, вам может потребоваться вручную сопоставить пути к файлам отладки.
Например, если ваш проект находится локально в C:\src\project
, но был собран в контейнере Docker с путем /mnt/c/src/project
, выполните следующие действия:
- Перейдите на
chrome://extensions/
, найдите расширение C/C++ DevTools Support (DWARF) и нажмите «Подробнее» > «Параметры расширения» . - Укажите старый и новый пути к файлам.
Узнать больше
Дополнительную информацию об отладке WebAssembly можно найти в инженерном блоге Chrome DevTools: