Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Автоматизация отладки проекта ...

2.3K
07 ноября 2005 года
ART-CODE
134 / / 15.11.2004
Всем привет !
Сталкнулся с такой проблемой при отладке программы:

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

ЕСТЬ ИДЕЯ автоматизировать написание отладочного кода - для этого написать программу, которой скармливаем например такой код:
 
Код:
void __fastcall TFormProgram::FunctionA(TObject *Sender)
{
  TMemoryStream * MS=NULL;
   MS= new TMemoryStream;
   if (MS==NULL) return;
   // какой-то код .....
   delete MS;
}


А программа на выходе делает так:
Код:
void __fastcall TFormProgram::FunctionA(TObject *Sender)
{
if(START_F>0) Log (START_F,"TFormProgram","FunctionA","")

  TMemoryStream * MS=NULL;
try{
   MS= new TMemoryStream;
}catch(...)
{
if(ERR_NEW>0) Log (ERR_NEW,"TFormProgram","FunctionA","MS= new TMemoryStream")
}
   if (MS==NULL) return;
   // какой-то код .....
try{
   delete MS;
}catch(...)
{
if(ERR_DELETE>0) Log (ERR_DELETE,"TFormProgram","FunctionA","delete MS;
")
}

if(END_F>0) Log (END_F,"TFormProgram","FunctionA","")
}


Нужно чтобы эта программа автоматически добавляла к
файлу заголовок и определение функции Log (...)
и набор преременных START_F,END_F,ERR_NEW,ERR_DELETE - и т. п. ...
смысл которых - управление работой функции Log (...) - они должны инициализироваться из LogIni файла, который разработчик может править и тем самым - управлять глубиной отладочной информации без перекомпиляции проекта.
Конечно и фунция Log (...) не так проста - в конечном итоге нужно получить базу данных, содержащюю инф. о том какие функции сколько раз вызывались и в каком потоке, сколько времени потратили на выполнение, если в программе произошла ошибка - какая фунция в этот момент выполнялась и что делала, какие значения переменных были переданы функции....


Таким образом получается 2 версии проекта :
-1- "чистый вариант" - без отладочного кода , который читается легко и с ним работает программист
-2- "отладочный вариант" - отдаем тестовым пользователям, пусть глюки отлавливают

Написать такое можно сравнительно быстро, НО
ВОТ ВОПРОС - МОЖЕТ ТАКОЕ УЖЕ ЕСТЬ ?
Кто что знает или кто что думает по этому вопросу ?
310
07 ноября 2005 года
fellow
853 / / 17.03.2003
А нельзя сразу писать нормально?
2.3K
07 ноября 2005 года
ART-CODE
134 / / 15.11.2004
Цитата:
Originally posted by fellow
А нельзя сразу писать нормально?



Если отладку сразу вставлять в код
-1-
Значительно ухудшается читаемость кода.
-2-
20-30% кода в программе будет повторяться - а все что часто повторяется ДОЛЖНО быть автоматизировано.

Или имеется ввиду писать нормально - это без ошибок ?
Ну это не реально,
особенно при написании многопользовательского сервера, чем я сейчас и занимаюсь, - предоставление самых разнообразных сервисов по множеству протоколов и работает 24/7/365 с неограниченным кол-вом пользователей, с внутренней логикой распределения нагрузки
я даже не в состоянии предсказать все возможные варианты развития событий, особенно при условии использования не совсем корректных клиентских программ, и различного качества каналов передачи данных , которыми эти клиенты подключаются.

246
07 ноября 2005 года
GIZMO
1.8K / / 30.07.2004
Цитата:
Originally posted by ART-CODE

...
ВОТ ВОПРОС - МОЖЕТ ТАКОЕ УЖЕ ЕСТЬ ?
...


Это было здесь ftp://194.226.246.33/

2.3K
07 ноября 2005 года
ART-CODE
134 / / 15.11.2004
Цитата:
Originally posted by GIZMO
Это было здесь ftp://194.226.246.33/


- ошибка при попытке доступа к серверу, анонимного пользователя не пускает.
А что там есть ? :)

310
07 ноября 2005 года
fellow
853 / / 17.03.2003
Цитата:
Originally posted by ART-CODE
Если отладку сразу вставлять в код
-1-
Значительно ухудшается читаемость кода.
-2-
20-30% кода в программе будет повторяться - а все что часто повторяется ДОЛЖНО быть автоматизировано.

Или имеется ввиду писать нормально - это без ошибок ?
Ну это не реально,
особенно при написании многопользовательского сервера, чем я сейчас и занимаюсь, - предоставление самых разнообразных сервисов по множеству протоколов и работает 24/7/365 с неограниченным кол-вом пользователей, с внутренней логикой распределения нагрузки
я даже не в состоянии предсказать все возможные варианты развития событий, особенно при условии использования не совсем корректных клиентских программ, и различного качества каналов передачи данных , которыми эти клиенты подключаются.



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

Если вы не в состоянии предсказать весьма ограниченный набор вариантов корректного развития событий, то, может быть, вам ещё рано писать многопользовательские серверы с претензией на автоматическую генерацию отладочного кода?

2.3K
07 ноября 2005 года
ART-CODE
134 / / 15.11.2004
Цитата:
Originally posted by fellow
Можно многого достичь, используя наследование, полиморфизм и обобщённое программирование. Например, сосредоточить отладочный сервис в малогабаритных шаблонных классах-примесях и инстанцировать по мере необходимости. Не будет потерь ни в читабельности, ни в повторяемости.
Читайте литературу по этой теме.

Если вы не в состоянии предсказать весьма ограниченный набор вариантов корректного развития событий, то, может быть, вам ещё рано писать многопользовательские серверы с претензией на автоматическую генерацию отладочного кода?


3
07 ноября 2005 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by ART-CODE
Всем привет !
Сталкнулся с такой проблемой при отладке программы:
<skip>


Попробуй ввести в процесс разработки такую практику, как TDD (Test Drive Development - разработка через тестирование).

2.3K
08 ноября 2005 года
ART-CODE
134 / / 15.11.2004
Цитата:
Originally posted by Green
Test Drive Development - разработка через тестирование



Спасибо, куплю книжку, прочитпаю что за зверь.
Но есть подозрение, что это не совсем то, что нужно - если сравнивать постановку задачи (см. мой первый пост) и отзывы о технологии TDD на сайте
http://www.rsdn.ru/Forum/Message/818404.htm

to fellow:
По поводу твоих нападок
- я не обижаюсь, конечно я занаю про классы и наследованиеи полиморфизм и все это можно успешно применять ЕСЛИ заранее знать какова будет конечная архитектура приложения. А это совсем не очевидно.
В моем случае я разработал не менее 3 различных вариантов внутреннего устройства сервера и мне необходимо оценить производительность, эффективность некоторых решений.

Насчет кол-ва вариантов возможного развития событий -
я конечно не самый хороший математик, но по самым простым прикидкам кол-во возможных состояний
одного сеанса связи одного пользователя не менее 2034 , а скорее всего на несколько порядков больше. Откуда ?
а вот :
s_count=12 -кол-во используемых сокетов при проксировании одного FTP соединения одного пользователя (я не буду обьяснять механизм проксирования FTP - но это так);
s_state=12 -кол-во состояний сокета, которые должен обрабатывать мой сервер (указан минимум, на самом деле- больше - это с учетом виртуальных состояний, которые возникают исходя из логики работы сервера)
Login=2 - есть или нет разрешение на использование сервиса
Redirect=2 - есть или нет автоматическое перенаправление
Block=2 - есть или нет блокировка запрошеного сервера
System=2 - есть или нет системные ресурсы для выполнения - например хватает ли оперативной памяти и т.п.
многое, многое другое...
12*12*2*2*2*2=2034 * многое другое...

НАСЧЕТ рано мне писать такие сервисы - это ты хорошо пошутил, смешно :)
Вспомни первые версии Windows - как они глючили и падали, вероято Биллу Гейтсу ,было рано писать такие вещи... :)
Затем он встроил-таки отладку в саму операционную систему - см. запрос на отправку отчета ошибке разработчикам - и теперь все работает заметно лучше.

Хотя и не идеально работающий , но все-же мой сервер уже несколько месяцев активно используется и прокачивает гигабайты траффика (при возникновении ошибок соответствующий поток просто перезапускается, а т.к. ошибки возникают раз в неделю , то это не заметно)

РЕЗЮМЕ
Я говорю о механизме , автоматически добавляющем отладочный real-time функционал в абсолютно любой проект по выбору разработчика.
Главное я понял - такого механизма за 2-3 дня я не найду, а этого времени мне достаточно, чтобы реализовать эту идею самому.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог