Исходный код отладки Node.js

Node.js

Ценность любой информации своевременна и актуальна, на момент написанияNode.jsПоследний выпуск являетсяv11.14.0,LTSдаv10.15.3, исходный код, появляющийся в тексте, взят изtag: v11.14.0. Используемая компьютерная среда: macOs 10.14.2.

предисловие

Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine.

Node.jsосновывается наV8а такжеlibuvпостроен, нижний слойC/C++реализация, в то время как часть стандартной библиотеки используетJSзаписывать. Поэтому отладка исходного кода Node.js разделена на две части:C/C++отладка кода иJSОтладка кода.Более...

Готов к работе

  1. Node.js исходный кододна порция
  2. Visual Studio Codeили другая отладкаC/C++,JSиз调试器/IDE.

начать отладку

компилировать

релизная версияNodeОн не поддерживает отладку, поэтому нам нужно самостоятельно собрать отлаживаемый код из исходного кода.Node,NodeПроходит сборка проектаmakeДля управления разработчики готовыconfigureфайл, поэтому создайте собственную версиюNodeОчень удобно.

Официальное руководство по сборке

Шаг 1: Добавьте отладчик в файл записи

Сначала перейдите в скачанный каталог репозитория исходного кода Node.js (все последующие операции выполняются в этом каталоге).

ИсправлятьJSИсходный файл записи (./lib/internal/bootstrap/node.js) в файле, добавьте его в шапкуdebugger.

'use strict';
debugger; // <<--- 在这里加入 debugger;
// This file is compiled as if it's wrapped in a function with arguments
// passed by node::RunBootstrapping()
/* global process, require, internalBinding, isMainThread, ownsProcessState */
/* global primordials */

const { Object, Symbol } = primordials;
const config = internalBinding('config');
const { deprecate } = require('internal/util');

setupProcessObject();

setupGlobalProxy();
setupBuffer();

Шаг 2: Выполните компиляцию

Node.js использует make для управления проектами, разработчики подготовили файлы конфигурации, нам просто нужно выполнить./configureВы можете сгенерировать конфигурацию компиляции по умолчанию, доступную в текущей среде, а затем выполнить make для компиляции. Но конфигурация компиляции по умолчанию не включает режим отладки, поэтому нам нужно выполнить./configureдобавить когда--debugОтлаживаемая конфигурация сборки может быть сгенерирована и затем скомпилирована.

Полная команда выглядит следующим образом:

#!/bin/bash

./configure --debug
make -C out  BUILDTYPE=Debug -j4

echo "showtime 🎉"

Поскольку нам нужно перекомпилировать каждый раз, когда мы изменяем файл, поэтому я написал эти команды здесьbuild.shКогда последующие модификации необходимо перекомпилировать, запустите этот файл один раз.

Перед выполнением этого файла вам необходимо предоставить этому файлу права на выполнение:

chmod +x build.sh

Готово, просто введите в командной строке./build.shМожешь начать компилировать, а потом идти делать чашку ☕️ (кофе или чай? чай, пожалуйста).  Скомпилированный файл можно найти в./out/Debug/находится в каталоге, внутриNodeФайлы - это все, что нам нужно.

Отладка исходного кода JS

Шаг 1: Подготовьте тестовый файл

Создайте проект/файл для отладки, напишите в нем все, что хотите, конечно, вы также можете использовать существующий проект/файл. Для удобства яNode.jsКаталог репозитория исходного кода создается нижеtest.jsфайл и написать:

console.log('hello world');

Шаг 2. Запустите службу

Теперь воспользуемся скомпилированнымNodeВыполните этот файл:

./out/Debug/Node --inspect-brk=9229 test.js

Когда вы увидите следующее приглашение, ваша служба включена и ее можно отлаживать:

Debugger listening on ws://127.0.0.1:9229/0aeaa4ec-113b-4e08-94d9-0477c61d59ac
For help, see: https://nodejs.org/en/docs/inspector

Шаг 3: Отладка

Далее доделываем вторую половину, используя установленныйVisual Studio Codeоткрыть свой проект

Щелкните логотип паука слева, чтобы войти в интерфейс конфигурации отладки, а затем нажмите кнопку конфигурации в правом верхнем углу (откройте.vscode/launch.json)

Примечание. В Visual Studio Code необходимо открыть проект, чтобы можно было создать файл конфигурации.

Заполните следующее содержимое в файле конфигурации:

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "type": "node",
            "request": "attach",
            "name": "Attact Program",
            "port": 9229
        }
    ]
}

Не забудьте сохранить изменения.

Вернитесь к интерфейсу настроек и выберите «Программу атаки», которую вы только что настроили, затем щелкните зеленый треугольник, чтобы начать, а затем вы можете войти вNode.jsв исходном кодеJSЧастично отлажен.

Затем каждый раз, когда вы меняете свой код, не забудьте выполнить следующееbuild.shСкомпилируйте снова.

Дополнительные сведения об отладке JS в vscode см.здесь

Отладка исходного кода C/C++

Установить плагин

Visual Studio CodeПо умолчанию не поддерживаетсяC/C++Для отладки нужно установить соответствующий плагин, открытьVisual Studio Codeмагазин плагинов, поискc++, установка называетсяC/C++Официальный плагин для

отладка

Как и часть JS, откройте установленныйVisual Studio Codeоткрыть свой проект

Щелкните логотип паука слева, чтобы войти в интерфейс конфигурации отладки, а затем нажмите кнопку конфигурации в правом верхнем углу (откройте.vscode/launch.json)

Примечание. Visual Studio Code необходимо открыть каталог, чтобы иметь возможность создавать файлы конфигурации.

Заполните следующее содержимое в файле конфигурации:

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(lldb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/out/Debug/Node",
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": true,
            "MIMode": "lldb"
        }
    ]
}

Помните, не забудьте сохранить.

Затем используйте IDE вC/C++входной файл./src/node_main.ccОтметьте логотип отладчика. Вернитесь к интерфейсу настроек и выберите «Программу атаки», которую вы только что настроили, затем щелкните зеленый треугольник, чтобы начать, а затем вы можете войти вNode.jsв исходном кодеC/C++Частично отлажен.

Ссылаться на