Обратите внимание, что большой сгенерированный C-файл все еще может быть разбит на несколько частей (с некоторой работой), если у вас нет одиночных огромных функций (например, какой-то одной функции с сотней тысяч строк).Поэтому я расширяю ответ dbush ниже.
Также, возможно, вы могли бы попробовать использовать систему Linux (если ваш сгенерированный файл C и программа легко переносимы в Linux).В Linux / x86-64, с недавним компилятором gcc
и недавним отладчиком gdb
, я смог отладить сгенерированный C-файл 2MLOC (со многими небольшими функциями, каждая из которых содержит несколько тысяч строк).Вам может понадобиться 32 гигабайта оперативной памяти.Возможно, даже MinGW можно использовать в Windows (я думаю, он также может обрабатывать большие файлы C).
Чтобы разбить сгенерированный файл C foo.c
на несколько частей (например, foo1.c
иfoo2.c
), вам может потребоваться несколько дней, чтобы выполнить следующее (поскольку требуется некоторая человеческая работа):
сначала сделайте отступ в коде C (возможно, удалив директивы #line
ранее).Вы можете использовать GNU indent .Вы получаете файл C, в котором функции четко разграничены (их тело имеет фигурную скобку в столбце 1).
Скопируйте и вставьте #include
строки foo.c
в foo1.c
и foo2.c
.Умно скопируйте (поэтому потратьте время на их понимание) глобальные переменные (возможно, дословно в foo1.c
и с extern
в foo2.c
. Для статических переменных, которые требуют некоторой работы: вы бы переименовали их (возможно, с достаточно уникальнымпрефикс), чтобы сделать их "глобальными". Таким образом, static int sv;
в foo.c
становится int myfooprefix_sv;
в foo1.c
и extern int myfooprefix_sv;
в foo2.c
. Конечно, вам нужно #define sv myfooprefix_sv
(в обоих файлах) послеТо же самое необходимо для статических функций, поэтому static void dothat(int);
становится void myfooprefix_dothat(int);
, затем #define dothat myfooprefix_dothat
и т. д.
Наконец, вы копируете и вставляете определения функций, поэтому первая половина функций переходит в foo1.c
и вторая половина функций в foo2.c
Попробуйте скомпилировать полученную программу. Отредактируйте foo1.c
и foo2.c
, чтобы исправить ошибки компиляции и компоновки.
Такое руководство (но утомительная процедура расщепления обычно работает. Да, это займет некоторое время. Есть патологические случаи, когда это не работает (но обычно генерируемые файлы C не попадают в такие случаи).