Удивительный модуль сообщества

отлаживать

Статус сборки Статус покрытия слабина OpenCollective OpenCollective

Небольшая утилита отладки JavaScript, смоделированная по технологии отладки ядра Node.js, работает в Node.js и веб-браузерах.

установка

1
$ npm install debug

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

debug предоставляет функцию, просто передайте этой функции имя вашего модуля, и он вернет декорированную версию console.error для вас, чтобы вы могли передавать операторы отладки. Это позволит вам переключать выходные данные отладки для различных частей вашего модуля как а также модуль в целом.

Пример app.js :

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
var debug = require('debug')('http') , http = require('http') , name = 'My App'; // fake app debug('booting %o', name); http.createServer(function(req, res){ debug(req.method + ' ' + req.url); res.end('hello\n'); }).listen(3000, function(){ debug('listening'); }); // fake worker of some kind require('./worker');

Пример worker.js :

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
var a = require('debug')('worker:a') , b = require('debug')('worker:b'); function work() { a('doing lots of uninteresting work'); setTimeout(work, Math.random() * 1000); } work(); function workb() { b('doing some work'); setTimeout(workb, Math.random() * 2000); } workb();

Затем используется переменная среды DEBUG чтобы включить их на основе пробелов или имен, разделенных запятыми.

Вот несколько примеров:

снимок экрана 2017-08-08 в 12 53 04 вечераснимок экрана 2017-08-08 в 12 53 38 вечераснимок экрана 2017-08-08 в 12 53 25 вечера

Примечание Windows

В Windows переменная окружения устанавливается с помощью команды set .

1
set DEBUG=*,-not_this

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

1
$env:DEBUG = "*,-not_this"

Затем запустите программу для отладки, как обычно.

Цвета пространства имен

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

Node.js

В Node.js цвета включаются, когда stderr является TTY, также необходимо установить модуль support supports-color вместе с debug, в противном случае для отладки будет использоваться лишь небольшое количество основных цветов.

Веб-браузер

Цвета также включены в «Веб-инспекторах», которые понимают опцию форматирования %c Это веб-инспекторы WebKit, Firefox ( начиная с версии 31 ) и плагин Firebug для Firefox (любая версия).

Миллисекундная разница

При активной разработке приложения может быть полезно узнать, когда время между одним вызовом debug() и следующим. Предположим, например, что вы вызываете debug() перед запросом ресурса, а также после того, как "+ NNNms" покажет Вы сколько времени провели между звонками.

Когда stdout не является TTY, используется Date#toISOString() , что делает его более полезным для регистрации отладочной информации, как показано ниже:

Условные обозначения

Если вы используете это в одной или нескольких ваших библиотеках, вы должны использовать имя вашей библиотеки, чтобы разработчики могли переключать отладку по своему усмотрению, не угадывая имена. Если у вас есть более одного отладчика, вы должны поставить перед ними префикс с именем библиотеки используйте «:» для разделения функций. Например, «bodyParser» из Connect будет «connect: bodyParser». Если вы добавите «*» в конце своего имени, он всегда будет включен независимо от настроек DEBUG Переменная окружения. Затем вы можете использовать ее для нормального вывода, а также для отладки.

Wildcards

Символ * может использоваться в качестве подстановочного знака. Предположим, например, что в вашей библиотеке есть отладчики с именами «connect: bodyParser», «connect: compress», «connect: session», вместо перечисления всех трех с DEBUG=connect:bodyParser,connect:compress,connect:session , вы можете просто сделать DEBUG=connect:* , или чтобы запустить все, используя этот модуль, просто используйте DEBUG=* .

Вы также можете исключить определенные отладчики, поставив перед ними префикс «-». Например, DEBUG=*,-connect:* будет включать все отладчики, кроме тех, которые начинаются с «connect:».

Переменные среды

При запуске через Node.js вы можете установить несколько переменных среды, которые будут изменять поведение ведения журнала отладки:

имя цель
DEBUG Включает / отключает определенные пространства имен отладки.
DEBUG_HIDE_DATE Скрыть дату из вывода отладки (не TTY).
DEBUG_COLORS Использовать ли цвета в выходных данных отладки.
DEBUG_DEPTH Глубина осмотра объекта.
DEBUG_SHOW_HIDDEN Показывает скрытые свойства на проверяемых объектах.

Примечание. Переменные среды, начинающиеся с DEBUG_ конечном итоге преобразуются в объект Options, который используется с форматерами %o / %O Полный список см. В документации по Node.js для util.inspect() .

Форматтеры

Отладка использует форматирование в стиле printf . Ниже приведены официально поддерживаемые форматеры:

Formatter представление
%O Pretty-печатать объект в несколько строк.
%o Pretty-печатать объект все в одну строку.
%s Строка.
%d Число (как целое число, так и число с плавающей запятой).
%j JSON. Заменяется строкой '[Circular]', если аргумент содержит циклические ссылки.
%% Одиночный знак процента ('%'). Это не использует аргумент.

Custom formatters

Вы можете добавить пользовательские средства форматирования, расширив объект debug.formatters . Например, если вы хотите добавить поддержку рендеринга буфера в виде шестнадцатеричного с %h , вы можете сделать что-то вроде:

1 2 3 4 5 6 7 8 9
const createDebug = require('debug') createDebug.formatters.h = (v) => { return v.toString('hex') } // …elsewhere const debug = createDebug('foo') debug('this is hex: %h', new Buffer('hello world')) // foo this is hex: 68656c6c6f20776f726c6421 +0ms

Поддержка браузера

CAN Build-A - браузер с помощью Вы готовы скриптом с помощью Browserify , или использовать только в Browserify-AS-A-Service Строить , если вы не хотите , чтобы создать его самостоятельно.

Состояние включения отладки в настоящее время сохраняется в localStorage . Рассмотрим ситуацию, показанную ниже, где у вас есть worker:a и worker:b , и вы хотите отладить оба. Вы можете включить это с помощью localStorage.debug :

1
localStorage.debug = 'worker:*'

А затем обновите страницу.

1 2 3 4 5 6 7 8 9 10
a = debug('worker:a'); b = debug('worker:b'); setInterval(function(){ a('doing some work'); }, 1000); setInterval(function(){ b('doing some work'); }, 1200);

Выходные потоки

По умолчанию debug регистрирует в stderr, однако это можно настроить для пространства имен, переопределив метод log :

Пример stdout.js :

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
var debug = require('debug'); var error = debug('app:error'); // by default stderr is used error('goes to stderr!'); var log = debug('app:log'); // set this namespace to log via console.log log.log = console.log.bind(console); // don't forget to bind to console! log('goes to stdout'); error('still goes to stderr!'); // set all output to go via console.info // overrides all per-namespace log settings debug.log = console.info.bind(console); error('now goes to stdout via console.info'); log('still goes to stdout, but via console.info now');

Установить динамически

Вы также можете включить динамическую отладку, вызвав метод enable() :

1 2 3 4 5 6 7 8 9 10
let debug = require('debug'); console.log(1, debug.enabled('test')); debug.enable('test'); console.log(2, debug.enabled('test')); debug.disable(); console.log(3, debug.enabled('test'));

печать:

1 2 3
1 false 2 true 3 false

Использование:
enable(namespaces)
namespaces могут включать режимы, разделенные двоеточием и подстановочными знаками.

Обратите внимание, что вызов enable() полностью переопределяет ранее установленную переменную DEBUG:

1 2
$ DEBUG=foo node -e 'var dbg = require("debug"); dbg.enable("bar"); console.log(dbg.enabled("foo"))' => false

Проверка, включена ли цель отладки

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

1 2 3 4 5
const debug = require('debug')('http'); if (debug.enabled) { // do stuff... }

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

авторы

  • TJ Holowaychuk
  • Натан Раджлич
  • Эндрю Райн

Покровители

Поддержите нас ежемесячным пожертвованием и помогите нам продолжать нашу деятельность. [ Стать спонсором ]

Спонсоры

Станьте спонсором и получите свой логотип на нашем сайте README на Github со ссылкой на ваш сайт. [ Станьте спонсором ]

лицензия

(Лицензия MIT)

Copyright (c) 2014-2017 TJ Holowaychuk < tj@vision-media.ca >

Настоящим бесплатно предоставляется разрешение любому лицу, получающему копию данного программного обеспечения и связанных с ним файлов документации («Программное обеспечение»), осуществлять операции с Программным обеспечением без ограничений, включая, помимо прочего, права на использование, копирование, изменение, слияние. публиковать, распространять, сублицензировать и / или продавать копии Программного обеспечения, а также разрешать лицам, которым предоставляется Программное обеспечение, делать это при соблюдении следующих условий:

Вышеуказанное уведомление об авторских правах и это уведомление о разрешении должны быть включены во все копии или существенные части Программного обеспечения.

ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЯ ГАРАНТИЙ ТОВАРНОГО ОБЕСПЕЧЕНИЯ, ФИТНЕСА ДЛЯ ОСОБЫХ ЦЕЛЕЙ И НИКАКИХ ФРИГЕНТОВ. ПРЕТЕНЗИИ, УЩЕРБ ИЛИ ДРУГОЙ ОТВЕТСТВЕННОСТИ, В ОТНОШЕНИИ ДЕЙСТВИЯ ДОГОВОРА, ИСПРАВЛЕНИЯ ИЛИ ИНОГО, ПРОИЗВЕДЕНИЯ, ИЛИ ИЛИ В СВЯЗИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ИЛИ ДРУГИМИ УЧАСТКАМИ В ПРОГРАММНОМ ОБЕСПЕЧЕНИИ.