Перейти к основному содержимому

Отладка (Debug)

Позволяет анализировать выполнение кода в реальном времени.

Введение​

Во время написания кода часто возникает необходимость проанализировать его выполнение.

В случае Netuno можно использовать:

  • _out.print — чтобы показать какую-либо информацию в выводе данных (output).
  • _log.info — чтобы показать какую-либо информацию в терминале сервера Netuno.

Однако бывают и более сложные сценарии, когда требуется более глубокий анализ, например проверить несколько значений объектов и переменных одновременно, протестировать выполнение конкретного кода в этом контексте — всё для того, чтобы лучше понять поведение.

В таких более сложных случаях всегда можно использовать показанные выше методы, такие как _out.print и _log.info, но это может превратиться в очень трудоёмкий и запутанный процесс, прежде чем удастся достичь хорошего понимания происходящего.

Отладка (debug) как раз и служит для того, чтобы обеспечить хорошее понимание происходящего, особенно в более сложных ситуациях.

Отладка (в английском: debugging, debug) — это процесс, используемый при разработке для поиска и устранения дефектов, сбоев, неправильного поведения и т.д.

Отладку можно разделить на 3 важных механизма:

  • Точка останова (Break Point): останавливает выполнение кода, после чего можно начать исследование в том месте, где код остановлен.
  • Наблюдение (Watch): позволяет наблюдать значения переменных в месте остановки кода.
  • Выполнение кода (Code Execution): можно временно выполнить любой код, чтобы провести какую-либо проверку в точке, где выполнение приостановлено для отладки.

Точка останова (Breakpoint)​

Точка останова (breakpoint) — это место в коде, где выполнение должно быть приостановлено для запуска процесса отладки.

Чтобы начать отладку в любом коде и на любом языке, поддерживаемом Netuno, таком как JavaScript, Python, Ruby, Kotlin или Groovy, в месте, где нужно начать отладку, добавьте следующий код:

_exec.debug()

Поскольку Netuno — полиглот, он работает с любым поддерживаемым языком, таким как: JavaScript, Python, Kotlin, Ruby или Groovy.

Теперь, чтобы начать отладку, выполните код, и выполнение остановится, будет приостановлено.

Затем перейдите в интерфейс разработки, в бэк-офисе в разделе Сборка, и в меню слева будет опция:

  • Отладка

Где можно найти двойную зелёную стрелку, которая означает, что при нажатии на неё выполнение может продолжиться:

Отладка — Продолжить

Двойная зелёная стрелка прерывает паузу отладки, благодаря чему выполнение кода продолжается нормально с того места, где оно остановилось.

Наблюдение (Watch)​

Для просмотра значений переменных используется жёлтая лупа.

При нажатии на жёлтую лупу можно указать имя переменной, значение которой нужно отслеживать.

Отладка — Наблюдение

Имя переменной и её текущее значение отображаются в списке; можно наблюдать за значениями нескольких переменных. Если какая-либо переменная не существует, то значения не будет.

Выполнение кода (Execute Code)​

Можно внедрить код для выполнения в контексте точки останова, то есть там, где происходит отладка.

Нажмите на синий символ кода, и можно ввести код, который требуется выполнить.

Отладка — Выполнение кода

Выполненный код отображается в списке ниже с указанием на то, что код был успешно выполнен; если возникла ошибка, сообщение об ошибке показывается вместе с кодом.

Настройка удалённой отладки​

При локальном запуске Netuno никакая настройка обычно не требуется.

Поскольку при локальной разработке host адреса WebSocket настраивается автоматически.

В локальных адресах обычно используются такие значения host:

  • localhost
  • 127.0.0.1
  • 192.168.1.* — пример любого IP-адреса локальной сети.
  • moe-prilozhenie.local.netu.no

Локальные адреса не требуют какой-либо настройки, поэтому этот шаг можно пропустить.

А в продакшене или при удалённой разработке, например в контейнере или VPN, может потребоваться указать внешний адрес (IP или домен), используемый для подключения WebSocket.

В этом случае перейдите в разрабатываемом приложении к файлу конфигурации окружения. В этом примере мы будем использовать файл окружения разработки, который находится в:

  • 📂 config/_development.json

Проверьте, нет ли уже такой конфигурации; если её нет, добавьте в конец файла конфигурации (в формате JSON) параметры конфигурации внешнего адреса, который будет использоваться для подключения WebSocket, например:

{
...
"dev": {
"ws": {
"host": "dev.netuno.org"
}
},
...
}

Информацию о порте не следует добавлять к адресу host в WebSocket.

Также можно передать несколько адресов host в массиве:

{
...
"dev": {
"ws": {
"host": [ "moy-konteyner.dev.netuno.org", "moy-proekt.com" ]
}
},
...
}

Прокси в продакшене (NGINX)​

В продакшене часто используется веб-сервер, выполняющий обратное проксирование, например NGINX.

Чтобы отладка работала через прокси, необходимо добавить специальную конфигурацию для перенаправления трафика, связанного с адресом WebSocket:

server {
listen 443 ssl;
server_name moy-proekt.com;

...

location /dev/ws/ {
proxy_pass http://127.0.0.1:9000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_http_version 1.1;
proxy_read_timeout 86400s;
proxy_send_timeout 86400s;
add_header X-Frame-Options "";
}
}

Заключение​

С помощью интерфейса отладки и команды _exec.debug() можно провести глубокое исследование того, что происходит.

В большинстве языков и серверных технологий, особенно в скриптовых, отладка обычно невозможна или сложна.

Netuno предлагает простой способ отладки многоязычного кода, который работает с различными поддерживаемыми языками, такими как JavaScript, Python, Ruby, Kotlin и Groovy.

Позволяет выполнять отладку многоязычного кода в удалённых средах и в продакшене.

Использование отладки значительно ускоряет разработку, обеспечивая большую точность при решении проблем, и становится незаменимым инструментом — попробуйте.