AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.06.2013, 07:59   #1  
Ярослав Щекин is offline
Ярослав Щекин
Участник
 
78 / 174 (6) ++++++
Регистрация: 16.03.2009
Анализатор незакрытых транзакций
У нас нередко возникала проблема с незакрытыми транзакциями (непарные ttsbegin/ttscommit). Мы пытались их устранять, искали и исправляли код с такими ошибками, но это было медленно и не очень успешно.

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

Программа предназначена для Ax 3.0, (но, наверное, будет работать и с другими версиями Axapta, но с худшими результатами) и обрабатывает .xpo-файлы (но job-ы не обрабатываются). Принцип работы простой: считается, что все открытые в методе транзакции должны быть в нём закрыты. Вообще программа использует набор эвристик, из-за чего могут быть как ложноположительные, так и ложноотрицательные результаты. В частности, циклы обрабатываются очень приблизительно. Кроме того, макросы программа не раскрывает, а просто "угадывает", что там могло быть (синтаксически).

Как пользоваться:
1. Эскпортируете объекты в какой-нибудь файл.xpo.
2. В cmd.exe или его аналоге (analyzer --- консольное приложение):
> analyzer.exe этот_файл.xpo > result.txt
3. Упорно ждёте завершения обработки, затем анализируете result.txt.

Если хотите попробовать на новых версиях Dynamics AX, то указывайте кодировку обрабатываемых файлов, например:
> analyzer.exe aot.xpo utf-8 > aot_result.txt

При сбоях в работе анализатора выдаются такие сообщения:

. Parse error. Token <x> in block <y>, state <z>
Данное сообщение означает, что произошёл сбой синтаксического анализатора, при этом указанный метод НЕ анализируется. Пример:

public void insert()
{
if if(!this.ABCCalcJourID) ttscommit;

\Tables\ABCCalcJour\insert, line 3:
-- Parse error. Token <if> in block <CondExpr>, state <Start>

. !ParseWarning: Unrecognized command (something)
Данные сообщения означают, что выявлена неизвестная анализатору команда или слово, открывающее блок. Анализ при этом продолжается.

Выявляемые предупреждения:
. 'break' is used outside of a loop or switch!
. 'continue' is used outside of a loop!
-- использование break/continue вне циклов/switch-ей.
. 'ttsabort' inside 'catch' is useless!
-- ttsabort внутри catch бесполезен (в нашей Ax 3.0/MSSQL это так).
. multiple ttsbegin/ttscommit pairs in linear block!
-- несколько транзакций в линейном блоке, обычно это ошибка.

Выявляемые ошибки:
. 'try' is useless inside transaction!"
-- try внутри транзакции бесполезен (в нашей Ax 3.0/MSSQL это так).
. 'return' with incorrect ttslevel!
-- выход из метода с некорректным уровнем tts.
. ttslevel<0!
. unpaired transaction!

-------------------------------------------------
В нашем случае результаты для всего AOT такие:

Время анализа: около 5 минут (313 сек).
Всего выявлено ошибок и предупреждений: 335
Из них:
Корректных ошибок и предупреждений: 286, ~85%
Формально ошибочных, но корректных (методы 'ttsbegin' и т.п.): 30, ~9%
Некорректных предупреждений: 7, ~2%
Ложноположительных результатов: 10, ~3%
Hack-ов (while (appl.ttsLevel()>0) ttscommit; ) : 2, менее 1%

Интересно, какие результаты получатся у Вас.
Вложения
Тип файла: zip analyzer.zip (737.1 Кб, 106 просмотров)
За это сообщение автора поблагодарили: Logger (10), Raven Melancholic (1), alex55 (3), imir (2).
Теги
ttscomit, best practice

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Чтение только завершенных транзакций. raz DAX: Программирование 4 19.05.2017 10:20
Неверный откат сопоставленных транзакций sgt.Pepper DAX: Программирование 4 17.01.2008 09:16
IMTS (Система множественных складских транзакций) yuranio DAX: Функционал 7 04.03.2005 17:56
Какая связь между Сводным планированием и Система множественных складских транзакций Wamr DAX: Функционал 6 27.09.2004 17:03
Очень частая фиксация транзакций - без этого никак? avzh DAX: Программирование 10 12.07.2004 10:35

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 04:28.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.