Callgrind: профиль определенной части моего кода

Я пытаюсь профилировать (с Callgrind) конкретную часть моего кода, удаляя шум и вычисления, которые меня не волнуют. Вот пример того, что я хочу сделать:

for (int i=0; i<maxSample; ++i) {
    //Prepare data to be processed...
    //Method to be profiled with these data
    //Post operation on the data
}

Мой вариант использования - это регрессионный тест, я хочу убедиться, что рассматриваемый метод все еще достаточно быстр (что-то вроде менее 10% дополнительных инструкций с момента последней реализации). Вот почему я хотел бы иметь более чистый вывод из Callgrind. (Мне нужен цикл for для обработки значительного объема данных, чтобы иметь хорошую оценку поведения метода, который я хочу профилировать)

Моей первой попыткой было изменить код на:

for (int i=0; i<maxSample; ++i) {
    //Prepare data to be processed...
    CALLGRIND_START_INSTRUMENTATION;
    //Method to be profiled with these data
    CALLGRIND_STOP_INSTRUMENTATION;
    //Post operation on the data
}
CALLGRIND_DUMP_STATS;

Добавление макросов Callgrind для управления инструментами. Я также добавил опции --instr-atstart = no, чтобы быть уверенным, что я профилирую только ту часть кода, которую я хочу ...

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

Я тоже пробовал

for (int i=0; i<maxSample; ++i) {
    //Prepare data to be processed...
    CALLGRIND_TOGGLE_COLLECT;
    //Method to be profiled with these data
    CALLGRIND_TOGGLE_COLLECT;
    //Post operation on the data
}
CALLGRIND_DUMP_STATS;

(или опция --toggle-collect = "myMethod") Но Callgrind вернул мне журнал без каких-либо вызовов (KCachegrind белый как снег :( и говорит ноль инструкций ...)

Правильно ли я использовал макросы / опции? Любая идея, что мне нужно изменить, чтобы получить ожидаемый результат?

Ответы на вопрос(2)

Ваш ответ на вопрос