LINUX.ORG.RU

Slowlog-библиотека для C++

 , ,


0

3

Всем привет.

Обычно я не пишу ничего на С++, но время от времени - приходится. В связи с этим, информацией о популярных библиотеках я не владею.

Хочется получить максимально быструю библиотеку, которая позволит логгировать время выполнения какого-то блока кода + некий набор переменных, от которых это время потенциально может зависеть, но делать это не каждый раз, а когда время превышено.

Условно, что-то вроде:

SlowLogger log(100); // max_time=100 мс.
...
log.write("%s", someObj.toString()); // выводим someObj, если с момента создания объекта прошло больше, чем max_time.


Понятно, что можно легко такое навелосипедить самому, но что-то не очень хочется.

★★★

Последнее исправление: unikoid (всего исправлений: 2)

Ответ на: комментарий от Kroz

Насколько я понял, это просто библиотека для логгирования. Пока мне для этих целей простого std::cout/cerr хватает, речь не о том же.

unikoid ★★★
() автор топика
Ответ на: комментарий от unikoid

А, невнимательно прочитал вопрос.

Тогда не знаю.

Kroz ★★★★★
()

Понятно, что можно легко такое навелосипедить самому, но что-то не очень хочется.

Кип калм и пиши свой велосипед :)

slackwarrior ★★★★★
()

В C++11 появились функции работы со временем и с интервалами, так что велосипед будет реально занимать 10 строк.

vzzo ★★★
()

В качестве внешней утилиты эту умеют valgrind и gprof. С небольшим оверхедом считать, сколько времени было потрачено на каждую функцию/строчку.

Davidov ★★★★
()
Последнее исправление: Davidov (всего исправлений: 1)
Ответ на: комментарий от Davidov

Насколько я помню, gprof даст мне понять, какая функция выполняется больше всего времени. Но я не смогу понять, на каких наборах исходных данных это происходит.
Мне же хочется логгировать именно такие частные случаи, подобно тому, как БД умеют логгировать медленные запросы.

unikoid ★★★
() автор топика
Ответ на: комментарий от unikoid

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

Iron_Bug ★★★★★
()
Последнее исправление: Iron_Bug (всего исправлений: 1)
Ответ на: комментарий от Iron_Bug

прогони тесты с заранее заготовленными данными

Задача как раз в том, чтобы заготовить эти самые данные, а потом уже анализировать поведение на них. Логировать все, что прилетает на вход - не слишком возможно, сейчас у меня нет решения для доставки логов, которое выдержит такой поток. Поэтому и хочется залогировать аномалии, которые имеет смысл исследовать дальше.
Кроме того, наличие таких логов позволит выявлять подобные аномалии в дальнейшем при их возникновении.
Хотя в целом не отрицаю, что возможно не слишком хорошо знаком с доступными инструментами и могу изобретать велосипед. Но по крайней мере мне он кажется логичным и оправданным.

unikoid ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.