суббота, 9 февраля 2013 г.

нарисовать siquence диаграмму

Когда в программе происходит что-то важное, вызываем «utp:report_event/5» (подставляем сюда название функции трассировки, которую объявили в шаге 1). По умолчанию данная функция не будет делать ничего, но впоследствии мы можем ее отловить, используя возможности трассировки Erlang. Вот пример взаимодействия, описанного выше:

Шаг 2. Трассируем события в программе

Contents: то, что будет отображено при щелчке на событие. Может предоставлять более детальную информацию о событии, не загромождая диаграмму.

Label: нотационная метка сообщения.

To: кому предназначено событие.

From: источник событий.

DetailLevel: число от 0 до 100. Оно обозначает уровень значимости данного события. Назначая основным событиям меньшие, а менее значимым бЈльшие числа, мы даём возможность трассировщику скрыть часть событий, таким образом добиваясь нужного уровеня гранулированности.

Описание аргументов:

Основная идея заключена во второй функции. Это функция-заглушка от пяти аргументов, которая сразу же отрабатывается. Возвращаемое значение «hopefully_traced» произвольно, но оно показывает что мы хотим вернуть из этой функции. Первая функция используется, когда мы отслеживаем исходящие и получаемые события одим и тем же компонентом.

report_event(_DetailLevel, _From, _To, _Label, _Contents) ->

?MODULE:report_event(DetailLevel, FromTo, FromTo, Label, Contents).

report_event(DetailLevel, FromTo, Label, Contents) ->

Первый шаг построить функцию трассировки. Моя выглядит следующим образом и расположена в модуле «utp».

Шаг 1. Строим функцию трассировки

Правда было бы здорово, если бы вы могли строить похожие диаграммы на основе данных трассировки программы автоматически? Что ж, Erlang вам в этом поможет. Я воспользуюсь некоторым кодом, что бы проиллюстрировать пример, как это сделать.

Предназначение данной диаграммы показать взаимодействие между различными параллельными компонентами системы. В данном примере Fred, Bob, Hank и Renee в ресторане. Каждый может легко нарисовать подобную диаграмму на бумаге. Проблема в том, что наброски на бумаге могут отличаться от того, что происходит во время выполнения вашей программы.

Вот одна из распространённых проблем многопоточных(concurrent) систем: события возникают постоянно в разных частях программы в разное время, и у вас нет возможности контролировать причину и время их возникновения. Чтобы отследить проблему, мы зачастую можем воспользоваться диаграммой последовательностей. Например, такой (спасибо Wikipedia):

Использование инструмента трассировки событий в Erlang

25 октября 2011 в 09:06

Использование инструмента трассировки событий в Erlang / Хабрахабр

Комментариев нет:

Отправить комментарий