Мотив создания ...
Существует много проектов в которых нужно сразу увидеть результат переменных в момент выполнения программы. Например обработка нажатий клавиш от пользователя, навигация между страницами в GUI приложениях, обработка данных из форм на веб проектах. В общем во всех проектах где есть цикл событий, хорошо бы видеть значения переменных, когда идет процесс отладки. Для этого используют обычный print()
но он по стандарту ограничен одной консолью, или logging()
но его нужно относительно дольше настраивать, чем проект console-debugger
, по причине того что нужно указывать файл, стиль вывода данных в файл, рейтинг обработки, в ручную запускать слежение за файлом, вручную закрывать слежение за файлом, когда вам больше не нужен обработчик. Я понимаю плюсы логирования но они не подходят для дебаггинг.
Console-debugger
Это программа на Python
создана для вывода данных в несколько окон. Подробно можно почитать на GitHub
Установка через pip
pip install console-debugger
Пример использования
import random
import string
random_word = lambda: "".join(random.choice(string.ascii_letters) for j in range(random.randint(1, 40)))
from console_debugger import Debugger, printD
from console_debugger.helpful.template_obj import dDEBUG, dWARNING, dINFO
if __name__ == '__main__':
a = Debugger(**dDEBUG)
b = Debugger(**dINFO)
c = Debugger(**dEXCEPTION)
Debugger.GlobalManager(typePrint="socket")
for x in range(10):
print(random_word(), file=a)
print(random_word(), file=b)
print(random_word(), file=c)
import random
import string
random_word = lambda: "".join(random.choice(string.ascii_letters) for j in range(random.randint(1, 40)))
from console_debugger import Debugger, printD
from console_debugger.helpful.template_obj import dDEBUG, dWARNING, dINFO
if __name__ == '__main__':
a = Debugger(**dDEBUG)
b = Debugger(**dINFO)
c = Debugger(**dEXCEPTION)
Debugger.GlobalManager(typePrint="socket")
for x in range(10):
printD(a,"Название 1", "Примечание 1",random_word())
printD(b,"Название 2", "Примечание 2",random_word())
printD(c,"Название 3", "Примечание 3",random_word())
Трассировка имени переменных и конвертирование различных данных в str
from console_debugger import Debugger, printD
from console_debugger.helpful.template_obj import dDEBUG, dWARNING, dINFO
if __name__ == '__main__':
a = Debugger(**dDEBUG)
b = Debugger(**dINFO)
c = Debugger(**dEXCEPTION)
Debugger.GlobalManager(typePrint="socket")
TracingName1 = "1"
TracingName2 = ["1"]
TracingName3 = "1",
for x in range(10):
printD(a, TracingName1)
printD(b, TracingName2)
printD(c, TracingName3)
Комментарии (25)
lair
19.09.2021 12:12+3Я понимаю плюсы логирования но они не подходят для дебаггинг.
А почему бы не использовать для отладки, гм, отладчик?
denisxab Автор
21.09.2021 18:09В многопоточном и многопроцессорное программирование, точки остановок блокируют интерпретатор, поэтому чтобы хоть как то следить за значениями в перемененных нужно их выводить в какой-то файл, или как в примере, через сокет в интерфейс.
lair
21.09.2021 18:10-1А для этого нужно логирование, потому что вы не успеете увидеть происходящее в интерфейсе.
denisxab Автор
21.09.2021 19:07Для этого я создал простую топорную логику, любой не нужный в данное время обработчик, можно по отдельности включать и отключать. Как вариант для обновления - можно в инициализации указать принудительную задержку для потока, чтобы можно было все разглядеть в реальном времени, но не блокировать полностью поток. Вообще я позиционирую эту программу, изначально для тестирования проекта в процессе его написания, потому много времени уходит на то чтобы разобраться с значениями переменных, а с ней удобно, можно в несколько консолей, в реальном времени следить за состоянием какого-то алгоритма.
lair
21.09.2021 19:09-1Для этого я создал простую топорную логику, любой обработчик не нужный в данное время, можно по отдельности включать и отключать.
Тогда вы пропустите нужную информацию, потому что обработчик будет отключен.
Логирование все еще лучше.
quarckster
19.09.2021 12:16+6from console_debugger import *
Пожалуйста не делайте так. Давайте придерживаться хорошего стиля и импортировать явно то, что нам необходимо.
nick758
19.09.2021 13:50Пользуйтесь, не факт, что нашёл все ошибки.
Есть много проектов, в которых нужно сразу видеть значения переменных в момент выполнения программы. Например, обработка нажатий клавиш пользователем, навигация между страницами в GUI приложениях, обработка данных из форм в веб проектах. В общем, во всех проектах, где есть цикл событий, хорошо бы видеть значения переменных, когда идет процесс отладки. Для этого используют обычный print(), но по стандарту он ограничен одной консолью, или loggin(), но его сложнее настраивать, чем проект console-debugger, так как нужно указывать файл, стиль вывода данных в файл, рейтинг обработки, вручную запускать слежение за файлом, вручную закрывать слежение за файлом, когда вам больше не нужен обработчик. Я понимаю плюсы логирования, но они не подходят для дебаггинга.
Теги тоже проверьте.
kx13
13.11.2021 22:03+1Отличная идея.
Можно сделать как надстройку над стандартной logging.
logger = Debuger.SetupLogger(*args) # и далее как обычно, например так # а библиотека уже в нужное окно отправит данные в зависимости от уровня логирования logger.debug('text')
Для этого всего-то надо сделать несколько кастомных Handlers и Formatters внутри вызова SetupLogger.
И не надо никаких "printD(a,'...')"
logging очень гибкая библиотека с помощью Handlers и Formatters можно отправлять что угодно и куда угодно.
LazyTalent
Есть loguru, которую можно вообще не настраивать.
unclegluk
Информативный вывод.
Vindicar
Выделение цветами в линуксовых терминалах. Про Windows, наверно, опять забыли. =)
unclegluk
У меня нет Виндов. Это вывод IDLE для МакОс.
LazyTalent
Почему такой необычный выбор инструмента?
unclegluk
Так получилось. Когда-то устроился на работу, а там Маки. Через пару дней МакОсь зацепила. Теперь дома четыре Мака.
LazyTalent
Я про IDLE — она последняя в моём списке, чтобы я запустил для проверки кода.
unclegluk
Использую IDLE вместо штатного калькулятора. И это великолепный калькулятор о котором я всегда мечтал.
denisxab Автор
Для Windows есть вариант с GUI интерфейсом
LazyTalent
Или изучай особенности ОС, на которой работаешь, или учись гуглить
github.com/Delgan/loguru/issues/246
unclegluk
От статьи ТС легче не стало. Первый же пример:
denisxab Автор
Тут написано `
Вероятно сервер не запущен`
Это специальная исключение, чтобы вы запустить сервер в удобном для вас интерфейсе.
denisxab Автор
В нем настройка, по запуску отслеживания изменений в файлах, занимает значительное время.