Background Image
Previous Page  15 / 22 Next Page
Information
Show Menu
Previous Page 15 / 22 Next Page
Page Background

появляются отдельные точки выполнения, условно соответствующие

конечным точкам подграфа вложенного вызова функции. В связи с

этим при построении отчета о найденном дефекте нельзя традицион-

ным способом указать путь, который прошло выполнение программы

при вызове функции. Для построения отчета при межпроцедурном

анализе методом резюме в настоящей работе предложен следующий

метод.

Задача проверяющих модулей — отложенная проверка: на основе

резюме вызываемой функции и состояния на момент вызова проверя-

ющий модуль должен сделать вывод о необходимости выдачи преду-

преждения (о срабатывании). Существует два варианта срабатывания

проверки. В первом варианте выдача предупреждения происходит вну-

три вызываемой функции. Допустим, что уровень вложенности вызова

равен единице. Такое допущение возможно, поскольку к нему можно

свести стек вызовов произвольного уровня вложенности. В этом слу-

чае конечной точкой трассы является узел графа выполнения вызыва-

емой функции. Если этот узел известен, то от него можно построить

трассу до корневого узла графа выполнения. Такая трасса-подграф бу-

дет путем, проходимым внутри функции при выполнении программы

до критической точки.

Второй вариант предполагает построение пути при необходимо-

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

до точки выхода. Эта задача сводится к первой при условии, что в

качестве конечной точки выбирается лист графа выполнения, соответ-

ствующий выбранной ветви выполнения резюме. Таким образом, для

корректного построения пути при моделировании вложенного вызо-

ва функции достаточно иметь информацию об узле графа выполне-

ния вызываемой функции, для которого выдается срабатывание, или о

листе графа выполнения, к которому относится выбранный путь вы-

полнения при применении резюме. Для этого достаточно сохранить

ссылку на этот узел. В случае построения пути изнутри вызываемой

функции за хранение ссылки может отвечать проверяющий модуль, ге-

нерирующий срабатывание. При построении полного пути по вложен-

ному вызову ссылку на лист графа выполнения вызываемой функции

можно хранить в узле применения резюме в качестве дополнительной

информации.

Поясним описанный метод примером. Рассмотрим функцию сле-

дующего вида:

1 void close_file(bool flag, FILE *f) {

2 . . .

3 if (flag)

4

fclose(f);

5 }

ISSN 0236-3933. Вестник МГТУ им. Н.Э. Баумана. Сер. “Приборостроение”. 2015. № 5 89