Мне часто приходится анализировать поведение чужого кода на С/ассемблере. Обычно для этого я рисую на бумаге структуры, переменные, стрелочки связей по данным, диаграммы состояний и т.д. Это довольно похоже на UML-моделирование, с уклоном в сторону диаграмм объектов и взаимодействий, и когда-то давно я пользовался для этого Rational Rose. Но Роза как-то для этого тяжеловесна, да и денег стоит. Минусы бумаги тоже очевидны — невозможно редактировать, нет ^c^v, место не резиновое.
Есть ли более удобная технология для моделирования поведения кода, чем UML?
Всегда мечтал об этом и даже реализовал собственный инструмент на основе Draw2d.org, но скажу вам честно — это не работает. Просто количество кода таково, что на экран влезает ужасно малое количество ромбиков и квадратиков. Даже при максимальном разбиении на функции и скрипты — работать невозможно. Т.е. в каком то идеальном приложении с идеальной архитектурой и количеством абстракций — может быть, но… В общем, мой вывод и совет — пока еще мы технологически не готовы к этому :-)
Мне не нужно получать код. Мне нужно 1) в сжатом виде кэшировать информацию, получаемую в процессе отладки/исследования существующего кода и 2) систематизировать/редактировать накопленные данные.
Ну если совсем глубокий подход, то пишете на специальном языке описание структуры кода и работаете с ней в LTSA — можно сразу проверить на всякие проблемы типа дэдлоков и прочее.