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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.04.2023, 03:21   #21  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
299 / 866 (29) +++++++
Регистрация: 23.10.2012
Спасибо, словно на съемках Санта Барбара побывал - там действительно проблема с преобразованием...
...у винды есть вот такая функция QueryPerformanceFrequency
У утилиты есть конвертер "QueryPerfCounter" с функцией:
X++:
public static long ConvertQPFTimeToTicks(ulong QPFTime)
{
	if (!initialized)
	{
		if (!NativeMethods.QueryPerformanceFrequency(out mFrequency))
		{
			throw new InvalidOperationException();
		}
		initialized = true;
	}
	return (long)((double)QPFTime / (double)mFrequency * (double)multiplier);
}
Где для mFrequency может быть инициализирована значением по умолчанию из той самой функции. История на этом могла бы и закончиться (ну да, выдавало бы оно разные результаты на разных машинах), если бы не лог трассировки в комбинации с этой строкой "QueryPerfCounter.Frequency = e.Properties.TryGetValue<long>("PerfFreq");" желающей видеть данное свойство у каждого события лога.
Только не все логи события "XppUtilFuncEvent" (согласно статистике) желают заполнять данную информацию. Поэтому получаем mFrequency равное 0, а далее "силу бесконечности".
Миниатюры
Нажмите на изображение для увеличения
Название: parserdebug.jpg
Просмотров: 41
Размер:	280.4 Кб
ID:	13560  
Старый 08.04.2023, 11:00   #22  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Судя по коду значение должно быть одинаково у всех замеров. Т. Е. MinInt64 у всех. А оно у одних так у других сяк.
Поэтому мне все же кажется что дело в переполнении.
Старый 08.04.2023, 17:30   #23  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
299 / 866 (29) +++++++
Регистрация: 23.10.2012
Лог на вход дает валидные данные.
Подставляем значения в формулу:
return (long)((double)QPFTime / (double)mFrequency * (double)multiplier);
Берем обычное консольное приложение и 4 переменные создаем.
X++:
double a = (double)QPFTime; // 2, пример из изображения выше
double b = 0; // проблемная переменная
double c = (double)multiplier; //  10000000, на само деле может быть любой
double d = (a / b * c);
Получаем infinity.

Цитата:
Сообщение от Товарищ ♂uatr Посмотреть сообщение
желающей видеть данное свойство у каждого события лога.
Вот тут погорячился. Трейсер просто последовательно считывает заголовки из файла.
Сначала считывается "красивый":

Следующий код его обрабатывает:
X++:
private void SetCurrentTraceInfo(EventArrivedEventArgs e)
{
	QueryPerfCounter.Frequency = e.Properties.TryGetValue<long>("PerfFreq");
	TraceInfo.Current.TotalBuffers = e.Properties.TryGetValue<uint>("BuffersWritten");
	TraceInfo.Current.EventsDropped = e.Properties.TryGetValue<int>("EventsLost");
	TraceInfo.Current.TimeStampBeginTick = e.Properties.TryGetValue<long>("StartTime");
	TraceInfo.Current.TimeStampEndTick = e.Properties.TryGetValue<long>("EndTime");
}
А когда дело доходит до обработки событий типа "XppUtilFuncEvent" (в БД он представлен как [dbo].[TraceLines] с [CallTypeId] равный 16) - предварительно "прилетает" заголовок с единственным свойством:

Следовательно безопасная e.Properties.TryGetValue<long>("PerfFreq"); выдает не исключение, а 0.

Решений проблемы как было 2.5 так и осталось:
1. Выяснить насколько правильно, что файл содержит BuildString в таком виде.
2. Внести коррективы в исполняемый файл добавив обработку состояния, что значение e.Properties.TryGetValue<long>("PerfFreq") нужно использовать для присвоения QueryPerfCounter.Frequency когда оно не равно 0.
2.5 При вставке записи в БД заменять отрицательные значения на 0 - но это скорее так, для галочки вариант.
Изображения
  

Последний раз редактировалось Товарищ ♂uatr; 08.04.2023 в 17:37.
Старый 13.04.2023, 18:22   #24  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
299 / 866 (29) +++++++
Регистрация: 23.10.2012
Привет.
Реализовал самый простой вариант п.2 - целям в полной мере соответствует (миниатюра 1).
Архив с дистрибутивом содержащим данное изменение во вложении.

П.1 - поверхностно изучал вопрос, результаты исследования можно уместить в одно изображение (миниатюра 2).
Миниатюры
Нажмите на изображение для увеличения
Название: traceFix.jpg
Просмотров: 55
Размер:	64.9 Кб
ID:	13567   Нажмите на изображение для увеличения
Название: dialogwithbing.jpg
Просмотров: 47
Размер:	48.9 Кб
ID:	13568  

Вложения
Тип файла: zip TraceParser6.3.fixed.zip (448.9 Кб, 61 просмотров)

Последний раз редактировалось Товарищ ♂uatr; 13.04.2023 в 19:52.
За это сообщение автора поблагодарили: Logger (20), alexkrut (2).
Старый 03.05.2023, 08:30   #25  
rashuf is offline
rashuf
Участник
 
14 / 15 (1) ++
Регистрация: 25.09.2013
Добрый день!
При запуске TraceParser из размещенного в теме дистрибутива получал ошибку

BusinessConnector could not be loaded or logon failed. Source code will be disabled.

Проблема заключалась в отсутствии config-файла. После добавления проблема исчезла.
В файле достаточно следующего содержания

Код:
<?xml version="1.0"?>
<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
  </startup>
</configuration>
Вложения
Тип файла: zip Microsoft.Dynamics.AX.Tracing.TraceParser.exe.config.zip (339 байт, 43 просмотров)
За это сообщение автора поблагодарили: Товарищ ♂uatr (5).
Старый 03.05.2023, 09:40   #26  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,309 / 3546 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Я обычно в клиентской утилите конфигурирования при бизнес-коннекторе выбираю нужную мне конфигурацию (= нужное мне приложение). Удобно, когда трассировка снимается с разных приложений
__________________
Возможно сделать все. Вопрос времени
Теги
ax2009, trace parser

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
dynamicsaxse: KB3163813 CU12 Known Issue – Incorrect Posting amounts – Shipment Packing slip posting Blog bot DAX Blogs 0 13.03.2017 18:11
dynamicscpm: Management Reporter bugs now available in LCS Issue Search Blog bot DAX Blogs 0 13.06.2015 00:14
Странное поведение при закрытии склада-ошибка в коде? Aquarius DAX: Программирование 11 27.06.2013 13:37
axinthefield: Choosing a Single Deployment or Multiple Deployments of AX2009 Blog bot DAX Blogs 0 15.06.2011 03:25
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 22:11.