Как предотвратить исключение функций из профилирования покрытия? - PullRequest
2 голосов
/ 29 октября 2010

Мы используем профилировщик покрытия AQTime для проверки результатов покрытия для модульных тестов. Кажется, что в целом все работает хорошо, но имеет неприятную привычку переоценивать охват, потому что некоторые функции вообще не появляются. Я думаю, что это потому, что компоновщик лишил их, потому что они не вызваны, но, очевидно, это не идеально, потому что я хотел бы, чтобы они отображались как «не покрытые».

Кто-нибудь знает, есть ли способ настроить Visual C ++ или AQTime таким образом, чтобы эти функции были правильно помечены как «не охваченные»?

Ответы [ 2 ]

3 голосов
/ 09 апреля 2012

AQtime получает список подпрограмм из отладочной информации модуля.Поскольку компоновщик удалил некоторые подпрограммы, для них нет отладочной информации, и AQtime не «видит» их.

Как правило, все компоновщики имеют возможность включать / отключать эту функцию.Например, в проекте Visual C ++ этот параметр называется References и находится под Linker |Оптимизация группа свойств.Удалите значение этого параметра или установите его на Нет (/ OPT: NOREF) в конфигурации приложения Отладка , и компоновщик не удалит неиспользуемые функции.Опция задокументирована здесь .

1 голос
/ 29 октября 2010

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

Наш инструмент SD C ++ Test Coverage не имеет такого причудливого поведения, по крайней мере, если вы фактически указываете, что содержащий модуль компиляции или заголовочный файл являются частью тех, которые должны быть инструментированы. (Возможно, вам не удастся перечислить заголовочный файл, содержащий тело функции, о котором не будет сообщено). Он даже сообщит, что функция, которая была встроена, была выполнена независимо от количества мест, где она была встроена.

...