2016-09-07 3 views
0

Я пишу некоторый тест на C++, и я использую gcov (на самом деле lcov, но я думаю, что это не так), чтобы получить информацию о покрытии.отключить покрытие gcov во время выполнения

Есть ли способ отключить запись информации во время выполнения? E.G. :

bool myTest() { 
    ObjectToTest obj; 

    /* Enable gcov... */ 

    obj.FunctionToTest(); 

    /* ...Disable gcov */ 

    if(obj.GetStatus() != WHATEVER) 
     return false; 
    else 
     return true; 
} 

В этом случае я хотел бы gcov, чтобы отобразить как «покрыты» только FunctionToTest но оставить ObjectToTest конструктор и GetStatus «раскрытый».

Заранее благодарен!

+0

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

ответ

0

Нет, в случае gcov у нас нет такой опции.

Я видел такие опции в некоторых инструментах покрытия, таких как клевер, который работает, непосредственно используя исходный код.

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

LCOV:

-r tracefile pattern 
    --remove tracefile pattern 
      Remove data from tracefile. 

GCOVR:

-e EXCLUDE, --exclude=EXCLUDE 
        Exclude data files that match this regular expression 
Смежные вопросы