На работе у нас есть действительно хороший инструмент, который помогает нам отслеживать то, что мы хотим с точки зрения планирования. Это было полезно много раз.
Это на C ++ и должно быть настроено в соответствии с вашими потребностями. К сожалению, я не могу поделиться кодом, только понятиями.
Вы используете «большой» volatile
буфер, содержащий метки времени и идентификатор события, которые вы можете выгрузить после вскрытия или после остановки системы журналирования (и, например, сбросить ее в файл).
Вы получаете так называемый большой буфер со всеми данными, а небольшой интерфейс анализирует его и показывает события с именем (вверх / вниз + значение), как осциллограф с цветами (настроенный в файле .hpp
).
Вы настраиваете количество генерируемых событий, чтобы сосредоточиться исключительно на том, что вы хотите. Это очень помогло нам в планировании проблем при использовании требуемого количества процессора на основе количества зарегистрированных событий в секунду.
Вам нужно 3 файла:
toolname.hpp // interface
toolname.cpp // code
tool_events_id.hpp // Events ID
Концепция состоит в том, чтобы определять события в tool_events_id.hpp
следующим образом:
// EVENT_NAME ID BEGIN_END BG_COLOR NAME
#define SOCK_PDU_RECV_D 0x0301 //@D00301 BGEEAAAA # TX_PDU_Recv
#define SOCK_PDU_RECV_F 0x0302 //@F00301 BGEEAAAA # TX_PDU_Recv
Вы также определяете несколько функций в toolname.hpp
:
#define LOG_LEVEL_ERROR 0
#define LOG_LEVEL_WARN 1
// ...
void init(void);
void probe(id,payload);
// etc
В любом месте кода вы можете использовать:
toolname<LOG_LEVEL>::log(EVENT_NAME,VALUE);
Функция probe
использует несколько сборочных строк для извлечения метки времени часов КАК МОЖНО СКОРЕЕ, а затем устанавливает запись в буфере. У нас также есть атомарный инкремент для безопасного поиска индекса, в котором будет храниться событие журнала.
Конечно, буфер является круглым.
Надеюсь, что идея не запутана отсутствием примера кода.