CallStack Delphi

  • Автор темы Temoxa
  • 2047
  • Обновлено
  • 17, Mar 2016
  • #1
Ребята как отловить все события , которые происходят в проекте? (Нажатие клавиш, открытие окон) И вывести это на отдельную форму, чтобы можно было смотреть какую кнопку я нажал сейчас, какое окно подвинуЛ? пробовал разобраться с ApplicationEvents.... не добил. Помогите советом плз.

Temoxa


Рег
06 Feb, 2015

Тем
5

Постов
23

Баллов
73
  • 17, Mar 2016
  • #2
покапайся на delphisource.ru Есть книга delphi руковдсто разработчика марко канту Там целая глава посвящена этому
 

LeshaRB


Рег
11 Jun, 2007

Тем
5

Постов
110

Баллов
160
  • 18, Mar 2016
  • #3
Было б время для решения задачи, я сюда не писал бы) Хочу в рабочем проекте собрать статистику, о том какие кнопки вообще не юзатся пользователями, и какие формы тоже не открываются... Чтобы не прописывать метод логирования в каждом методе открытия окна или нажатия кнопки, хочу через события все отлавливать и складывать в бд, через месяц посмотреть что юзается))) Мб готовое что - то есть?))
 

Temoxa


Рег
06 Feb, 2015

Тем
5

Постов
23

Баллов
73
  • 26, Mar 2016
  • #4
Хорошее дело вы задумали :-), все через это проходят. Мы - тоже проходили. Выяснилось, что никто и никогда статистику не смотрит. А делали мы все руками - факт открытия формы и факт выполнения запроса. Реализуется в виде 2-х таблиц - сеансы и деталировка.
 

maxim220


Рег
17 Jun, 2006

Тем
0

Постов
28

Баллов
28
  • 28, Mar 2016
  • #5
maxim220, post: 766622:
Хорошее дело вы задумали :-), все через это проходят. Мы - тоже проходили. Выяснилось, что никто и никогда статистику не смотрит. А делали мы все руками - факт открытия формы и факт выполнения запроса. Реализуется в виде 2-х таблиц - сеансы и деталировка.
Так может сырцы дашь, а не балоболить? В джава есть понятие перехвтчики, тут не знаю
 

LeshaRB


Рег
11 Jun, 2007

Тем
5

Постов
110

Баллов
160
  • 28, Mar 2016
  • #7
через месяц посмотреть что юзается)))
У меня правда один вопрос, а зачем? Есть кнопка отчет за квартал по лоигке она и будет юзаться раз в квартал... А допусти ежедноевное обновление если не автомам, то и каждый день будет юзаться
 

LeshaRB


Рег
11 Jun, 2007

Тем
5

Постов
110

Баллов
160
  • 21, Jul 2016
  • #9
В Java есть, перехватичики, думаю в последних версиях Delphi должно появиться что-то такое

@Loggable
public class BookService {

@Inject
@ThirteenDigits
private NumberGenerator numberGenerator;

public Book createBook(String title, BigDecimal price, String description) {
Book book = new Book(title, price, description);
book.setIsbn(numberGenerator.generateNumber());
return book;
}
}

@InterceptorBinding
@Target({ ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface Loggable {
}

@Interceptor
@Loggable
public class LoggingInterceptor {
@Inject
private Logger logger;

@AroundInvoke
public Object logMethod(InvocationContext ic) throws Exception {
logger.entering(ic.getTarget().getClass().getName(), ic.getMethod().getName());
try {
return ic.proceed();
} finally {
logger.exiting(ic.getTarget().getClass().getName(), ic.getMethod().getName());
}
}
}

public class LoggingProducer {
@Produces
public Logger produceLogger(InjectionPoint injectionPoint) {
return Logger.getLogger(injectionPoint.getMember().getDeclaringClass().getName());
}
}
 

LeshaRB


Рег
11 Jun, 2007

Тем
5

Постов
110

Баллов
160
  • 22, Jul 2016
  • #10
Чтобы не прописывать метод логирования в каждом методе открытия окна
По окнам, как возможный вариант, создать класс-наследник TForm, в его методы вписать логику логирования, и во всех формах заменить класс родитель с TForm на свой класс.

Ну и в uses этот модуль вставить.

Решается простым поиском с заменой.

И код дублировать не нужно.

Также можно и с кнопками поступить, если их разновидностей в проекте не слишком много.
 

ascrew


Рег
29 May, 2010

Тем
0

Постов
3

Баллов
3
  • 25, Jul 2016
  • #11
В топике написано "Call Stack". Вопрос: как это соотносится с "отловить все события , которые происходят в проекте? (Нажатие клавиш, открытие окон) И вывести это на отдельную форму, чтобы можно было смотреть какую кнопку я нажал сейчас, какое окно подвинуЛ?" Это как бы разные вещи.

Если нужен логгер событий - юзай логгер.

Что угодно - от OutputDebugString, до SmartInspect. Если нужен стек вызовов - юзай трассировщики.

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

JCL (JEDI Code Library, см. модуль JclDebug), EurekaLog, madExcept.
 

JCDenton


Рег
15 Feb, 2013

Тем
1

Постов
15

Баллов
25
Тем
49554
Комментарии
57426
Опыт
552966

Интересно