Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: хочу сделать подробный дебаг, и при возможности отключать его

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
AmsTaFF
Отправлено: 23 Июля, 2013 - 16:40:54
Post Id


Гость


Покинул форум
Сообщений всего: 84
Дата рег-ции: Июнь 2013  
Откуда: Россия, Москва


Помог: 1 раз(а)




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

как я сделал сейчас:
есть класс A, и есть класс B наследник от A
наследование сделано этой ф-цией http://javascript[dot]ru/tutorial/ob[dot][dot][dot]-funkciya-extend

так же сделаны классы Adbg и Bdbg, которые наследуются от A и B соответственно.
я создал фабрику, которая при значении true в переменной DEBUG, выдает вместо A - Adbg, а вместо B - Bdbg.

Все хорошо и замечательно, пока не захочешь использовать методы из Adbg в Bdbg. В случае Bdbg получается так:
A<-B<-Bdbg

т.е. было бы изумительно, если A превратилась в Adbg

плюсы моего решения таковы, что основной код вообще не знает что его дебажут и сам он чистенький и остается понятным (классы A и B), а в классах для дебага (Adbg, Bdbg) есть только всякие логи и прочая инфа.

вопрос, есть ли ещё какие решения имеющие такой же или похожий плюс? или как проще заменить A на Adbg (в примере чуть выше)

(так же добавлю, что декоратор тут не поможет, т.к. открытых методов у меня 1-2, и ещё очень много закрытых, открывать закрытые неохота (я понимаю что в js такого понятия нету, но так проще держать все в порядке))
 
 Top
LIME
Отправлено: 23 Июля, 2013 - 16:50:45
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




а чем не устраивает инструмент разработчика в Chrome? Firebug?
 
 Top
esterio
Отправлено: 23 Июля, 2013 - 16:50:51
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




ИМХО зачем себе усложнять жызнь. пользуйтесь console.log при разработке и все. Потом акуратненко зачищаем после себя и имеем готовое решение, без многоуровневых extend и прочего.
 
 Top
AmsTaFF
Отправлено: 23 Июля, 2013 - 16:57:22
Post Id


Гость


Покинул форум
Сообщений всего: 84
Дата рег-ции: Июнь 2013  
Откуда: Россия, Москва


Помог: 1 раз(а)




я и так пользуюсь и firebug'ом, и вывожу console.log.
но проблема в том, что выводить приходится много и багов, которые надо исправить, много. И мне необходима ф-ция включения/отключения дебага каких-то классов.

задача заключается в том, чтобы видеть что происходит в программе, как она отработала, какие данные загрузила,какие значения отправила, какие эвенты запустила, а потом отключить часть из этой информации. Если просто в методах прописать console.log'и, то консоль будет засорена, а при ещё одном баге, снова придеться писать дебаговую информацию
 
 Top
LIME
Отправлено: 23 Июля, 2013 - 16:58:45
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




точки останова? не?
трассировка? не?
 
 Top
AmsTaFF
Отправлено: 23 Июля, 2013 - 17:06:09
Post Id


Гость


Покинул форум
Сообщений всего: 84
Дата рег-ции: Июнь 2013  
Откуда: Россия, Москва


Помог: 1 раз(а)




скажем так, у меня нет необходимости пошагово изучать работу программы, или где-то её останавливать, чтобы посмотреть на окружение, есть необходимость знать что произошло при том или ином клике и очень подробно знать, какой обработчик эвента запустился, когда пришли данные от сервера, и когда они были на него посланы и с какими данными
 
 Top
LIME
Отправлено: 23 Июля, 2013 - 17:07:37
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




ээммм....ну я не знаю какие там еще есть инструменты...но имхо достаточно вставить точку останова в обработчик и кликнуть мышу чтоб узнать какой запустился...и тд итп
(Добавление)
имхо тут нужен не инструмент а умение
 
 Top
esterio
Отправлено: 23 Июля, 2013 - 17:21:29
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




помоему console.log и трасировкы хватает с головой
(Добавление)
LIME пишет:
имхо тут нужен не инструмент а умение

+1
 
 Top
AmsTaFF
Отправлено: 24 Июля, 2013 - 08:48:24
Post Id


Гость


Покинул форум
Сообщений всего: 84
Дата рег-ции: Июнь 2013  
Откуда: Россия, Москва


Помог: 1 раз(а)




эххх... ладно, может быть я неправильное решение принял. Но вот представьте что у вас есть асинхронное приложение из 3к строчек. Где присутствует много эвентов, названия методов и свойств "неговорящие" (например методы val, set, setValue делают практически одно и то же) + производится загрузка данных из БД или кэша LocalStorage + присутствует большое кол-во багов (например баг, когда данные грузятся 4-5 раз (хоть и из кэша, но 4-5 раз!)).

и, я думаю что у всех возникнет желание взять под контроль эту программу и знать что происходит. Но, если просто написать везде console.log, то записи засрут console, из-за этого необходимо как-то их фильтровать. (и добавлю, что экземпляров класса A - 20+, а B - 6)

в чем я не прав?
 
 Top
LIME
Отправлено: 24 Июля, 2013 - 12:09:06
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




AmsTaFF пишет:
в чем я не прав?
не знаю...но мне страшно А?!
 
 Top
esterio
Отправлено: 24 Июля, 2013 - 13:35:49
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




AmsTaFF
Первое что хочеться спросить: ето Ваш код или Вы ковиряете чужой?
 
 Top
IllusionMH
Отправлено: 24 Июля, 2013 - 13:43:22
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




esterio, в первой строке ж
AmsTaFF пишет:
Мне приходится так делать, т.к. досталась программа полностью асинхронная
 
 Top
AmsTaFF
Отправлено: 24 Июля, 2013 - 14:18:14
Post Id


Гость


Покинул форум
Сообщений всего: 84
Дата рег-ции: Июнь 2013  
Откуда: Россия, Москва


Помог: 1 раз(а)




esterio, если бы код был свой, такого изврата мне не пришлось бы делать.

Пришлось перейти на другой способ (т.к. реализовать то, что хотел раньше можно только танцами с бубном и извратом страшным), хоть и немного громоздкий.

делаю ф-ции add и _add, в _add - весь функционал , а в add, всякие debug'и и прочий мусор неинтересный... (я не знаю как такой способ называется)
 
 Top
DelphinPRO
Отправлено: 24 Июля, 2013 - 14:36:49
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




не всегда достаточно console.log и трассировки.
Иногда нужно видеть именно значения некоторого набор переменных, а чуть позже - другого. При этом выводя все это в консоль - получаем простыню, в которой сложно ориентироваться.
Можно использовать console.group(), но тоже не всегда помогает.
Приходится постоянно, коментировать\раскоментировать определенный вывод дебаг-сообщений
И в таком случае переключатель был бы весьма полезен.
Впрочем, я не знакомился глубоко с файрбагом, возможно у него есть встроенные средства управления логами


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
AmsTaFF
Отправлено: 24 Июля, 2013 - 14:51:45
Post Id


Гость


Покинул форум
Сообщений всего: 84
Дата рег-ции: Июнь 2013  
Откуда: Россия, Москва


Помог: 1 раз(а)




DelphinPRO, именно

сейчас сделал такой простой самопис переключателя, пока его хватает:
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. /**
  3.  * @type {bool}
  4.  */
  5. Cart_.DEBUG = true;
  6. Cart_.DEBUG_SECTIONS = {
  7.         SStorage: true,
  8.         Input: false,
  9.         Cart: true,
  10.         Inputs_by_type: {
  11.                 Select: false,
  12.                 Radios: true,
  13.                 Typeahead: false,
  14.                 Radio: false,
  15.                 Input: true
  16.         },
  17.         Ajax: false
  18. };
  19. /**
  20.  * @param object
  21.  * @returns {boolean}
  22.  * @function
  23.  */
  24. Cart_.IS_DBG = function(object){
  25.         if(Cart_.DEBUG){
  26.                 if(Cart_.DEBUG_SECTIONS.Input == true){
  27.                         if(object.constructor === Cart_.Inputs.Input && object instanceof Cart_.Inputs.Input && Cart_.DEBUG_SECTIONS.Inputs_by_type.Input)
  28.                                 return true;
  29.                         if(object.constructor === Cart_.Inputs.RadiosInput && object instanceof Cart_.Inputs.RadiosInput && Cart_.DEBUG_SECTIONS.Inputs_by_type.Radios)
  30.                                 return true;
  31.                 }
  32.                 if(Cart_.DEBUG_SECTIONS.Cart == true && object.constructor === Cart_.Cart && object instanceof Cart_.Cart)
  33.                         return true
  34.         }
  35.         return false;
  36. };
  37.  


в классе такой код:
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. /**
  3.          * @public
  4.          * @param id
  5.          * @param qty
  6.          */
  7.         self.add = function (id, qty) {
  8.                 if(Cart_.IS_DBG(self)){
  9.                         self.checkForDebugInited();
  10.                         console.log(self.withPrefix('::add: производим добавление нового товара'));
  11.                 }
  12.                 self._add(id,qty);
  13.         };
  14.         /**
  15.          *
  16.          * @param id
  17.          * @param qty
  18.          * @private
  19.          */
  20.         self._add = function (id, qty) {
  21.                 if (typeof qty == 'object')
  22.                         qty = qty.val();
  23.                 if (!qty)
  24.                         qty = 1;
  25.           ....
  26.  


в дальнейшем покопаю в сторону включения и отключения групп логов в console

(Отредактировано автором: 24 Июля, 2013 - 14:51:59)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB