Как отлаживать глюк как в примере?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Как отлаживать глюк как в примере?

Сообщение Sharfik » 19.06.2015 20:55:28

Есть какие то средства, чтобы найти ошибку?
Сценарий такой. Запускаю программу, открываю в ней проект, закрывают проект, открываю второй, забываю закрыть диалог работы с базой данных, закрываю проект, открываю третий проект получаю ошибку "невозможно получить доступ к памяти". В участке кода, ниже процедура остановки. Если повторяю все что было выше, то ничего не происходит, и все работает.
Код: Выделить всё
procedure TFLauncher.StartProject(Filename: String);
var
   PageCount:integer;
begin
  if not FileExistsUTF8(Filename) then exit;
  if Assigned(ThisApp.ActiveProject) then exit;
  PageCount:=pgcView.PageCount; //Точка остановки программы, и ошибка доступа к pgcView.
  OpenProject(FileName);
   if PageCount<pgcView.PageCount then
   pgcView.ActivePageIndex:=pgcView.PageCount-1;
end;
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 809
Зарегистрирован: 20.07.2013 01:04:30

Re: Как отлаживать глюк как в примере?

Сообщение zub » 19.06.2015 22:16:21

Если отбросить всякую банальщину, то видимо при определенном сценарии выполнения программы куча портится. Самый плохой тип ошибок - найти причины довольно трудно.
Я обычно поступаю так:
- прогнать с heaptrc, устранить утечки - они часто связаны с подобными ошибками
- прогнать valgrind`ом - находит разные типы ошибок в том числе приводящие к таким последствиям
- если не помогло, выяснить что конкретно испорчено на момент PageCount:=pgcView.PageCount, поставить точку останова на момент создания pgcView или того что испорчено и вписать в watches соответствующее выражение, только не типа pgcView.чтототам, а через разименование конкретного адреса в памяти. Далее постепенно прогоняя программу искать момент на котором это значение "испортится"
Последний раз редактировалось zub 19.06.2015 22:20:09, всего редактировалось 2 раз(а).
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: Как отлаживать глюк как в примере?

Сообщение Little_Roo » 19.06.2015 22:16:37

конфликт версий лазаря и fpc?
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 639
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

Re: Как отлаживать глюк как в примере?

Сообщение Sharfik » 20.06.2015 15:35:47

сценарии выполнения программы куча портится

Найти бы в чем разница сценария, если не в действиях пользователя.

Спасибо, буду искать.
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 809
Зарегистрирован: 20.07.2013 01:04:30


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 236

Рейтинг@Mail.ru