покрытие кода в C

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

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

10.12.2008 18:21:38
У меня та же проблема, что вы в итоге использовали. Вы можете опубликовать свое решение?
ransh 1.08.2017 20:45:36
4 ОТВЕТА
РЕШЕНИЕ

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

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

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

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

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

1
14.12.2008 12:01:03

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

0
10.12.2008 18:44:39

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

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

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

1
11.12.2008 07:15:43

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

1
4.03.2016 02:21:54