2008-12-10 4 views
1

Я ищу, чтобы иметь покрытие кода в C. Я не могу полагаться на такие инструменты, как gcov, поскольку я работаю на разных платформах/компиляторах.Покрытие кода в C

В принципе, я ищу стратегию включения покрытия кода в мою (собственную реализацию) единичную тестовую структуру.

+0

У меня такая же проблема, что вы в конечном итоге использовали. можете ли вы опубликовать свое решение? – ransh 2017-08-01 20:45:36

ответ

1

Было бы очень полезно, если вы обновили свой вопрос для описания платформ и компиляторов, которые вы используете.

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

В UNIX вы также можете запустить процесс, используя ptrace(), на один шаг приложения и тем самым зафиксировать выполняемые инструкции.

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

Опять же, для получения полезного ответа потребуется более подробная информация о среде выполнения и уровне детализации.

0

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

1

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

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

Извините за ответы только вопросы ... НТН

1

А Page on code-coverage tools говорит, что что-то, называемое GCT Брайаном Мариком, реализует покрытие кода с помощью перевода источника в источник, поэтому вы можете преобразовать свой код C, а затем создать его с помощью своего компилятора для конкретной платформы. Я не отслеживал подробности.

Смежные вопросы