После того, как я что-то исправил в программе, при выходе, вылетает SIGSEGV почти всегда.
Иной раз, даже два раза. Мало того, что это раздражает, это ещё означает, что, вероятно, где-то есть утечка ресурсов.
Стек вызовов показывает что-то невразумительное: обращение из деструкторов компонент (MyDAC).
Не приложу ума как отловить эти ошибки.
Может, кто подскажет?
SIGSEGV при выходе
Модератор: Модераторы
ну есть пара идей
1. сделать лог. чтобы особенно подробный вывод был при работе деструкторов. посмотреть, что за чем разрушается
2. сделать все компоненты наследниками некоего класса TGlobalComponent, который бы при создании добавлял себя, своё имя и свой ClassName в некий глобальный список. Потом по этому списку смотреть, какие объекты живут в каждый момент. Ну при разрушении он ессно должен удалять себя из списка. к моменту завершения работы смотреть, как с ними обстоят дела
Также если у вас нити-потоки в приложении, можно их также хранить в глобальном списке. чтобы при создании они добавлялись. и смотреть, какие на момент выхода из проги работают, какие стоят, какие разрушены и т.п.
я сам часто сталкивался с такой лажей. испробовал сам эти методы. правда, мои проги всё равно лагали после того, как я ввёл такой "контроль". но намного меньше. особенно если вводил его сразу, как только начинал писать прогу, а не когда она начинала лагать
1. сделать лог. чтобы особенно подробный вывод был при работе деструкторов. посмотреть, что за чем разрушается
2. сделать все компоненты наследниками некоего класса TGlobalComponent, который бы при создании добавлял себя, своё имя и свой ClassName в некий глобальный список. Потом по этому списку смотреть, какие объекты живут в каждый момент. Ну при разрушении он ессно должен удалять себя из списка. к моменту завершения работы смотреть, как с ними обстоят дела
Также если у вас нити-потоки в приложении, можно их также хранить в глобальном списке. чтобы при создании они добавлялись. и смотреть, какие на момент выхода из проги работают, какие стоят, какие разрушены и т.п.
я сам часто сталкивался с такой лажей. испробовал сам эти методы. правда, мои проги всё равно лагали после того, как я ввёл такой "контроль". но намного меньше. особенно если вводил его сразу, как только начинал писать прогу, а не когда она начинала лагать
1. сделать лог. чтобы особенно подробный вывод был при работе деструкторов. посмотреть, что за чем разрушается
Ох, тяжко. Но, похоже, единственный вариант. К тому же, всё-равно, надо лог делать.
Если к примеру, класс компонента и строку запихнуть, то возможно будет определить место до которого не дошло.
2. сделать все компоненты наследниками некоего класса TGlobalComponent, который бы при создании добавлял себя, своё имя и свой ClassName в некий глобальный список.
В общем, компонент много и они разные...
Потом по этому списку смотреть, какие объекты живут в каждый момент. Ну при разрушении он ессно должен удалять себя из списка. к моменту завершения работы смотреть, как с ними обстоят дела
Также если у вас нити-потоки в приложении, можно их также хранить в глобальном списке. чтобы при создании они добавлялись. и смотреть, какие на момент выхода из проги работают, какие стоят, какие разрушены и т.п.
О! Вспомнил. В CBuilder6 был очень удобный инструмент - "CodeGuard". Может, есть подобное для lazarus?
особенно если вводил его сразу, как только начинал писать прогу, а не когда она начинала лагать
Поздно пить Боржоми.
Спасибо.
Ещё есть предложения?
Добавлено спустя 1 час 23 минуты 1 секунду:
Как получить:
1.) Имя метода в котором выполняется код;
2.) Строку в файле исходнике (в случае прилинковки отладочной информации);
чтобы записать в лог?
- Иван Шихалев
- энтузиаст
- Сообщения: 1138
- Зарегистрирован: 15.05.2006 11:26:13
- Откуда: Екатеринбург
- Контактная информация:
2) Я бы попробовал модуль LineInfo при включенной опции -gl.
