отлаживать
Небольшая утилита отладки 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
18var 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
16var 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
Затем используется переменная среды, чтобы включить их на основе имен, разделенных пробелами или запятыми .
Вот некоторые примеры:
Примечание Windows
В Windows переменная среды задается с помощью set
команды.
1set 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
9const 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
:
1localStorage.debug = 'worker:*'
А затем обновите страницу.
1
2
3
4
5
6
7
8
9
10a = 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
17var 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
9let 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
31 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
5const debug = require('debug')('http');
if (debug.enabled) {
// do stuff...
}
Вы также можете вручную переключить это свойство, чтобы принудительно включить или отключить экземпляр отладки.
Авторы
- Ти Джей Головайчук
- Натан Райлих
- Эндрю Райн
Сторонники
Поддержите нас ежемесячным пожертвованием и помогите нам продолжить нашу деятельность. [ Стать спонсором ]
Спонсоры
Станьте спонсором и разместите свой логотип в нашем README на Github со ссылкой на ваш сайт. [ Стать спонсором ]
Лицензия
(Лицензия MIT)
Copyright (c) 2014-2017 Т.Дж. Холовайчук <tj@vision-media.ca>
Настоящим бесплатно любому лицу, получившему копию данного программного обеспечения и связанных с ним файлов документации («Программное обеспечение»), предоставляется разрешение на работу с Программным обеспечением без ограничений, включая, помимо прочего, права на использование, копирование, изменение, объединение. публиковать, распространять, сублицензировать и/или продавать копии Программного обеспечения, а также разрешать лицам, которым предоставлено Программное обеспечение, делать это при соблюдении следующих условий:
Вышеупомянутое уведомление об авторских правах и настоящее уведомление о разрешении должны быть включены во все копии или существенные части Программного обеспечения.
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ГАРАНТИЯМИ КОММЕРЧЕСКОЙ ЦЕННОСТИ, ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ И НЕНАРУШЕНИЯ ПРАВ. АВТОРЫ ИЛИ ОБЛАДАТЕЛИ АВТОРСКИХ ПРАВ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ЗА ЛЮБЫЕ СОБЫТИЯ. ПРЕТЕНЗИИ, УБЫТКИ ИЛИ ДРУГАЯ ОТВЕТСТВЕННОСТЬ ПО ДЕЙСТВИЮ КОНТРАКТА, ПРАВОНАРУШЕНИЮ ИЛИ ДРУГИМ ОБРАЗОМ, ВОЗНИКАЮЩИЕ ИЗ, ИЗ ИЛИ В СВЯЗИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ИЛИ ДРУГИМИ ДЕЛАМИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.