Как правило, вы можете повернуть руку инструмента покрытия кода и получить отчет, в котором показаны пути, которые были выполнены во время данного прогона. В этом отчете должен быть показан сам код, причем первые несколько столбцов размечены в соответствии с конкретной записью инструмента покрытия о том, был ли выполнен заданный путь.
Возможно, вы сможете использовать это прямо, или вам, возможно, придется предварительно обработать его и либо удалить код, который не был выполнен, либо добавить новую запись в каждой строке, которая сообщает, было ли это выполнено (большинство инструментов отображают только информация о пути в контрольных точках):
Так что из инструмента покрытия вы можете получить такой отчет:
T- if(sometest)
{
x somecode;
}
else
{
- someother_code;
}
Обозначение T- указывает, что оператор if только когда-либо оценивается как true, и поэтому выполняется только первая часть кода. Более поздняя запись 'x' указывает, что эта строка была выполнена.
Вы должны быть в состоянии сформировать регулярное выражение, которое соответствует только тогда, когда первый столбец содержит T, F или x, чтобы вы могли захватить все выполненные операторы управления и выполненные строки.
Иногда вы будете получать информацию о покрытии только в каждой контрольной точке, что затем требует, чтобы вы проанализировали файл C и отметили строки выполнения самостоятельно. Не так просто, но и не невозможно.
Тем не менее, это звучит как интересный вопрос, где решение, вероятно, больше работы, чем оно стоит ...
-Adam