Описание тонкостей при ведении логов
| ID потока | Занимаемая/виртуальная память | Дата / Время | Тип события | Событие |
| 5984 | 55028/21032 KB | 15.01.2019 16:37:21.002 | TRY: | TEventManager.DoEvent(4100, ) |
| 5984 | 55028/21032 KB | 15.01.2019 16:37:21.002 | TRY | TEventManager.DoEvent.CallProc(4100, ) |
| 6700 | 55056/21116 KB | 15.01.2019 16:37:21.002 | TRY: | TDebugThread.Execute.Start |
| 5984 | 55056/21116 KB | 15.01.2019 16:37:21.002 | Thread TFreezeChecker (6632) Created | |
| 5984 | 55056/21116 KB | 15.01.2019 16:37:21.002 | DONE: | TEventManager.DoEvent.CallProc(4100, ) |
| 5984 | 55064/21116 KB | 15.01.2019 16:37:21.002 | DONE: | TEventManager.DoEvent(4100, ) |
При корректном поведении для большинства событий "TRY" должно быть событие "DONE". В приведенном выше примере стартует поток, но метода "DONE" нет, т.к. он вызывается при завершении приложения.
Логирование запросов
8460 73232/46048 KB 15.01.2019 16:37:23.222 TRY: 1.2.TDatabaseConnector.CreateReadQuery.CrSect.Enter
8460 73240/46048 KB 15.01.2019 16:37:23.236 DONE: 1.2.TDatabaseConnector.CreateReadQuery.CrSect.Enter
8460 74084/50560 KB 15.01.2019 16:37:23.693 TRY: 1.7.SQL_OpenSession.CreateReadQuery
-----------------------------------------------------------
select session from SYS$OPENSESSION(0, 0, '&Computer=A-SAZONOV&LangCode=RU')
-----------------------------------------------------------
8460 74084/50560 KB 15.01.2019 16:37:23.693 DONE: 1.7.SQL_OpenSession.CreateReadQuery
8460 74084/50560 KB 15.01.2019 16:37:23.700 1.7.8686.Open [10 ms]
8460 74084/50560 KB 15.01.2019 16:37:23.700 TRY: 1.7.8686.Fetch
8460 74084/50560 KB 15.01.2019 16:37:23.700 DONE: 1.7.8686.Fetch [0 ms]
8460 74084/50560 KB 15.01.2019 16:37:23.700 TRY: TDatabaseConnector.FreeQuery ReadTrans=False AssignedTransaction=False IsException=False
8460 74084/50560 KB 15.01.2019 16:37:23.701 TRY: 1.7.8686.Commit
8460 74084/50560 KB 15.01.2019 16:37:23.703 DONE: 1.7.8686.Commit.Result = 1
8460 74084/50560 KB 15.01.2019 16:37:23.703 TRY: TDatabaseConnector.FreeQuery -> CrSectLeave OnCrSectLeave=False FCrSect=True
8460 74084/50560 KB 15.01.2019 16:37:23.703 DONE: TDatabaseConnector.FreeQuery -> CrSectLeave
8460 74084/50560 KB 15.01.2019 16:37:23.703 DONE: 1.7.8686.FreeQuery [10 ms, 1 records, 52 B]
Стандартные поля описаны выше. Событие TDatabaseConnector.CreateReadQuery.CrSect.Enter следит за очередностью выполнения запросов. Если в логе есть подобное событие с типом "TRY", но нет "DONE", это значит, что какой-то другой запрос "завис", т.е. для него не было события TDatabaseConnector.FreeQuery.CrSect.Leave. Сам запрос из таблицы также исключаем.
| ID подключения к БД | Счетчик запросов | Процедура / ID транзакции | Действие |
| 1 | 7 | SQL_OpenSession | CreateReadQuery |
| 1 | 7 | 8686 | Open [10 ms] |
| 1 | 7 | 8686 | Fetch |
| 1 | 7 | 8686 | Fetch [0 ms] |
| 1 | 7 | 8686 | Commit |
| 1 | 7 | 8686 | FreeQuery |
Т.е. порядок действий таков:
Поиск ошибок в логах.
Одним из ключевых слов при поиске ошибок в логе является ERROR. Для поиска ошибок в логе, необходимо :
1. Воспроизвести проблему
2. Открыть сформировавшийся лог Shelter любым текстовым редактором (предпочтительнее Notepad++)
3. Нажать Ctrl + F в полей найти ввести error
4. Нажать Найти
5. Попытаться найти решение самостоятельно
Исключения по error, на которые можно не обращать внимание :
1. select error
2. ERROR: Different Charset [DBCharset=UNICODE_FSS,Charset=WIN1251]
3. ERROR : TShelterDLL.Destroy