Удаленная отладка Node.js приложений и кода на WebKit браузерах

    В статье пойдет речь о Must Have тулзе для удаленной отладки Node.js приложений либо кода на WebKit браузерах node-inspector.

    Для отладки кода в браузере, впринципе удаленная отладка и не нужна, не считая мобильных устройств, где она фактически не возможна потому что крайне не удобна. Совсем другое дело с серверным JavaScript. Node.js имеет несколько отладчиков, восновном продвигают ndb Node Debugger — консольная утилита для дебага Node.js приложений. Подходит только для фанатов консоли либо для мазохистов. Работать не удобно, отлаживать долго, по сравнению с отладкой кода в том же FireBug.

    Что же умеет node-inspector:
    1. Удаленная отладка
    2. Отладка в графическом интерфейсе WebKit-debugger (На клиент ничего не нужно ставить — у вас все уже есть)
    3. Редактирование runtime-кода!
    4. Использует WebSockets, и никакого polling'а!
    5. Удаленное профилирование блоков кода c использованием v8-profiler

    Пара скриншотов, которые все объясняют


    Просмотр исходного кода
    image

    Контекст функции
    image

    Установка


    Требования node, npm
    npm install node-inspector



    Запуск


    1. Запускаем инспектор в фоне node-inspector &
    node-inspector запустит веб сервер, который по умолчанию будет слушать все входящие соединения на :8080
    2. И запускаем наш скрипт node --debug path/to/yourprogram.js
    нод откроет интерфейс отладки на порту 5858
    3. Открываем любой десктопный WebKit браузер — лучше Chrome и переходим по ссылке http://YOUR-SERVER-IP:8080/debug?port=5858 Важно: в URL должен быть именно IP
    4. Хром откроет интерфейс отладчика (как на 1-м скриншоте)
    5. Радуемся и отлаживаем удаленно

    Использование




    За проектом наблюдают около 500 пользователей и он бурно развивается.
    Если вы найдете баги или у вас есть вопросы — node-inspector, вики node-inspector

    PS Сперва хотел запостить коммент в предыдущий топик-ссылку об удаленной отладке habrahabr.ru/blogs/javascript/114811 но коммент выходил слишком длинный, поэтому решил оформить статью.
    Поделиться публикацией

    Комментарии 12

      +2
      Работает! Круто!
      Фича поистине чудеснейшая. А то я задолбался уже console.log() или sys.puts() расставлять по коду :)
        +1
        > 3. Редактирование runtime-кода!
        Вау! /me пускает слюньки
          0
          LiveEdit, к сожалению, не всесилен и иногда ведет себя непостижимым для простого человека образом, если правка не тривиальная.
          Была пара тредов с удивлением в nodejs листе, когда ryah попросил потестировать ветку с перегрузкой модулей по живому реализованной через LiveEdit (кажется эта — github.com/joyent/node/tree/reload).
          0
          Node-inspector штука отличная, но у меня работает очень не стабильно. Более того, у меня пока что ни один дебаггер(node-inspector, ndb, node debug) не заработал с unit-test фреймворками: ни с node-qunit, ни с nodeunit. Есть у кого опыт отладки тестов?
            0
            чуть чуть оффтоп, но ведь тесты как раз и созданны чтоб свести процесс деббагинга до минимума — т.е. вместо дебаггинга просто нужно просто написать тест, уменьшив захват проверяемого кода и так рекурсивно пока не найти нужный кусок, который не работает :)

            А по теме: а не поделитесь немного опытом создания тестов для nodejs? я пока набросал для себя мини-модуль, который позволяет писать типа:
            (given)
            (
               function() { .... }
            }
            (when)
            (
               function() { ...}
            ) 
            (then)
            (
               function() { should(); should(); ...) 
            ) 
            ()
            

            и скриптик который запускает эти спецификации из папки.

            код тривиальный, но возможно я изобретаю велосипед? погуглив ничего не нашел толкового
              0
              Я использую expresso из кроме простой формы написания тестов в.т.ч асинхронных умеет составлять code coverage отчеты, в довольно красивом виде, но только в консоли. Из недостатков — предоставляет формат вывода только для разработчика — не подходит для автоматизированного тестирования и CI.

              Есть ещё Vows у него более продвинутая форма тестирования(интересный для изучения), он умеет выдавать разные формы отчетов — подходит для автоматизированного тестирования и CI, но не умеет code coverage.

              Ну и QUnit for nodejs для тех кто привык к QUnit (он обратно совместим с QUnit)
              Стандарта тестирования де-факто под node.js ещё нет — пока все на вкус и цвет :)
            0
            <оффтоп>
            А можно реквестировать статью по инфраструктуре запуска существующих node приложений?
            Имеются в виду сугубо практические приёмы: что прописывается в nginx, как устроен демон/скрипт запуска node в случае падения, где работает и как запускается node (например, в screen или в виде еще чего подобного), если оформлен в виде службы, то каким образом.
            </оффтоп>
              +2
              Думаю это то, что вы искали и добавлю чуть больше
              1. Красивый запуск node.js приложений Init + Monit nodejs.ru/296 (я запускаю через start-stop-daemon потом планирую переделать)
              2. Прокси node.js<->nginx stackoverflow.com/questions/5009324/node-js-nginx-and-now
              3. Кластер node.js — запуск нескольких воркеров (node.js по молчанию использует только 1 процессор) без особого изменения логики приложения learnboost.github.com/cluster/
              4. Горячая замена кода nodejs.ru/59 (я просто рестартую демона — потерь при рестарте практически нет при нагрузке в 200 рпс)
                0
                nodejs.ru/296
                То, что нужно, спасибо! Как сам пропустил, не понимаю.
                  0
                  По запуску приложений можно также посмотреть в сторону forever.
              0
              последний коммит в репозитарий github.com/dannycoates/node-inspector был в прошлом году. Не слишком ли давно для активно развивающегося проекта?
                0
                настораживает :/

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

              Самое читаемое