2017-01-20 10 views
2

Я использую frama-c, чтобы сделать некоторые эксперименты по нарезке программ. Инструмент замечательный, и есть много разных типов нарезки (например, по результату или по заявлению). Я использую структуру данных программы, как:Нарезка с использованием frama-c

typedef struct ComplexData { 
    int x; 
    int y; 
    char string_[100]; 
    size_t n; 
} ComplexData; 

Это просто пример для того, чтобы понять, как Frama-с может порезать программу по результату производства функции. В принципе, метод main вызывает функцию, которая возвращает значение типа ComplexData. Как выполняется сравнение между различными исполнениями? Есть проверка на каждое значение структуры? Нравится this?

ответ

2

Опция -slice-return f of Frama-C инструктирует slicer хранить все утверждения, которые способствуют вычислению кода возврата f. Для вашего типа ComplexData это означает содержимое любого из полей. Любое утверждение, которое вычисляет, например. y, или один из символов в string_, будет сохранен.

Относительно Сравнение между различными исполнениями, статические слайсеры фактически работают по-разному. Они приближают поведение каждой функции во всех возможных исполнениях. (В случае Frama-C это делается с использованием метода, известного как abstract interpretation.) Таким образом, нет необходимости в сравнить два исполнения.

+0

Большое спасибо за ваш четкий ответ. Большинство статей, которые я читаю, описывают _динамический slicing_ и, в частности, они пытались сравнить траекторию на разных исполнениях. Итак, может ли абстрактная интерпретация использоваться только для _статической нарезки_? Наконец, в отношении того, что я прочитал, траектория была сохранена в выходном файле, и я видел только критерий, основанный на примитивах данных, таких как _integers_. По этой причине я подумал, что аналогичное сравнение для структур данных. Даже если в этом случае нужно сравнить каждое поле. – Luke

+2

Правильно, я забыл про динамическую нарезку. Я отредактировал свой ответ соответственно. Абстрактная интерпретация по своей сути статична, поэтому я не думаю, что ее можно использовать для динамического среза. – byako

+0

Хорошо. Да, ты прав. Во всяком случае, это может иметь большие преимущества, когда вам приходится сравнивать сложные структуры данных. – Luke

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

  • Нет связанных вопросов^_^