1. сделать лог. чтобы особенно подробный вывод был при работе деструкторов. посмотреть, что за чем разрушается
Ох, тяжко. Но, похоже, единственный вариант. К тому же, всё-равно, надо лог делать.
Если к примеру, класс компонента и строку запихнуть, то возможно будет определить место до которого не дошло.
2. сделать все компоненты наследниками некоего класса TGlobalComponent, который бы при создании добавлял себя, своё имя и свой ClassName в некий глобальный список.

Самоубийственно. Причём, segfault, наверняка, при разрушении форм... Где-то в деструкторе что-то не разрушается. Потом, может, это пытается разрушиться где-то ещё, но т.к. форма уже была разрушена...
В общем, компонент много и они разные...
Потом по этому списку смотреть, какие объекты живут в каждый момент. Ну при разрушении он ессно должен удалять себя из списка. к моменту завершения работы смотреть, как с ними обстоят дела
Также если у вас нити-потоки в приложении, можно их также хранить в глобальном списке. чтобы при создании они добавлялись. и смотреть, какие на момент выхода из проги работают, какие стоят, какие разрушены и т.п.
О! Вспомнил. В CBuilder6 был очень удобный инструмент - "CodeGuard". Может, есть подобное для lazarus?
особенно если вводил его сразу, как только начинал писать прогу, а не когда она начинала лагать
Поздно пить Боржоми.

Спасибо.
Ещё есть предложения?
Добавлено спустя 1 час 23 минуты 1 секунду:Как получить:
1.) Имя метода в котором выполняется код;
2.) Строку в файле исходнике (в случае прилинковки отладочной информации);
чтобы записать в лог?