Динамический срез в C/С++

после прочтения книги отладки от Андреаса Целлера, меня заинтересовала Dynamic Slicing (http://en.wikipedia.org/wiki/Program_slicing).

В настоящий момент я нашел только подходящие инструменты для анализа Java. Знаете ли вы такие инструменты для C/С++?

Ответы

Ответ 1

Немного информации в дополнение к Робу

  • Инструмент для резки программ Wisconsin развился в инструменте CodeSurfer. Хорошие новости: он коммерчески доступен и поддерживается, и он отлично работает для того, что он делает. Плохая новость (возможно): на самом деле она не создает уменьшенную программу, которая вычисляет то же значение, которое вы выбрали, но это очень удобно для навигации исходного кода, который вы еще не записали.

  • Frama-C обрабатывает только C (в обозримом будущем нет С++). Для навигации исходного кода неплохо, но он может создавать эквивалентную меньшую программу для указанного вами критерия, если исходная программа имеет то, что она может автоматически анализировать (без рекурсии, без динамического выделения). Frama-C является Open Source и имеет список рассылки, в котором ваши вопросы будут приветствоваться, если вас интересуют методы, которые он использует.

Причина, по которой CodeSurfer не рискует создать эквивалентную программу, и Frama-C может делать это только для кода со встроенными ограничениями, короче говоря, для этого требуется знание значений указателей, которые могут быть произвольно трудными для точного вычисления.

Ответ 2

Там есть инструмент, указанный на странице Википедии, которую вы цитируете. Это для C, поэтому я предполагаю, что это может сработать для любого "C/С++".

Также для C, а также упоминается на странице Википедии:

Ответ 3

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