Потрясающий модуль сообщества

отлаживать

Статус сборки Статус покрытия Слабый 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Затем используется переменная среды, чтобы включить их на основе имен, разделенных пробелами или запятыми .

Вот некоторые примеры:

снимок экрана 08.08.2017 в 12:53 04 вечера снимок экрана 08.08.2017 в 12:53:38 снимок экрана 08.08.2017 в 12:53:25

Примечание Windows

В Windows переменная среды задается с помощью setкоманды.

1
set DEBUG=*,-not_this

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

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

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

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

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

Node.js

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

Веб-браузер

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

Разница в миллисекундах

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

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

Конвенции

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

Подстановочные знаки

Символ *может использоваться в качестве подстановочного знака. Предположим, например, что в вашей библиотеке есть отладчики с именами "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 . Ниже приведены официально поддерживаемые средства форматирования:

форматтер Представление
%O Красиво распечатайте объект в несколько строк.
%o Довольно распечатать объект в одной строке.
%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

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

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

Состояние включения отладки в настоящее время сохраняется с помощью 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
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... }

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

Авторы

  • Ти Джей Головайчук
  • Натан Райлих
  • Эндрю Райн

Сторонники

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

Спонсоры

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

Лицензия

(Лицензия MIT)

Copyright (c) 2014-2017 Т.Дж. Холовайчук <tj@vision-media.ca>

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

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

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