Решено: APPCRASH как искать или как исправить?

Общие вопросы программирования, алгоритмы и т.п.

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

Re: APPCRASH как искать или как исправить?

Сообщение Лекс Айрин » 18.06.2016 15:51:08

azsx писал(а):Стек пока я увеличивать не буду, так как не смог понять что это и почему мне не хватает стандартного (у меня рекурсий нет).


Тут не обязательно рекурсия... возможно просто слишком глубоко вложенная процедура/функция с большим количеством параметров на каждом уровне вложенности. Каждая подпрограмма создает собственный "кадр" в стеке (резервирует место под собственные параметры вызова). Правда, я не думаю, что это касается данного случая. А стек... это особый сегмент данных для временного хранения данных необходимый для многих инструкций процессора.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: APPCRASH как искать или как исправить?

Сообщение zub » 18.06.2016 15:54:50

zub писал(а):Получить стек

Если что - я имел ввиду стек вызовов на момент ошибки))
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

Re: APPCRASH как искать или как исправить?

Сообщение azsx » 18.06.2016 15:58:32

угу. Если быть точнее: это может стать поводом...

что делать? Я могу как то супер освобождать TStringList?
Построчное чтение из файла, или "кусками" не подойдут варианты?

нет, крайне долго. И для некоторых файлов почти невозможно.
Получить стек - отладить программу. Если стек не поможет - сделать подробный лог и ловить момент когда программа начинает вести себя нештатно

логи я сделаю, а вот что такое "Получить стек"?
Есть соответствующие инструменты для ловли утечек - ключик -gh

не знал.

Добавлено спустя 2 минуты 59 секунд:
и как получить "стек вызовов на момент ошибки"?
возможно просто слишком глубоко вложенная процедура/функция с большим количеством параметров на каждом уровне вложенности. Каждая подпрограмма создает собственный "кадр" в стеке (резервирует место под собственные параметры вызова). Правда, я не думаю, что это касается данного случая

точно не мой случай, штук 6 процедур, работают по принципу отработал - вышел с процедуры. Запуск по времени каждую секунду с отключением таймера на время выполнения.
azsx
энтузиаст
 
Сообщения: 959
Зарегистрирован: 16.11.2015 06:38:32

Re: APPCRASH как искать или как исправить?

Сообщение pupsik » 18.06.2016 16:05:05

Код: Выделить всё
  St:= TStringList.Create;
  try
    St.LoadFromFile(FName);
    Result:= St.Text
  finally
    St.Free
    end
по поводу этого участка... Вы уверены что он освобождается? А если исключение сработает? И, вполне возможно, где то ещё у вас собака "зарыта".
А теперь предположим.
Загрузили 100 метровый файлик, получили исключение, а программа работает и грузить новую порцию. И так несколько раз подряд...
Напрашивается странный вопрос: как среагирует система на подобное???

Добавлено спустя 6 минут 28 секунд:
что делать? Я могу как то супер освобождать TStringList?
повод и причина разное :) Я имел ввиду: смотря как работать. И да.. сам stringlist может быть поводом.
нет, крайне долго. И для некоторых файлов почти невозможно.
хм... Да же не знаю что сказать. Может вы не правильно готовите?

по времени каждую секунду с отключением таймера на
хм.. таймер, "исключение по тихому", переполнение...
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: APPCRASH как искать или как исправить?

Сообщение azsx » 18.06.2016 16:13:22

Таким образом надо?
Код: Выделить всё
  St:= TStringList.Create;
  try
    St.LoadFromFile(FName);
    Result:= St.Text
  except
    St.Free
end 
finally
    St.Free
    end
Последний раз редактировалось azsx 18.06.2016 16:15:24, всего редактировалось 1 раз.
azsx
энтузиаст
 
Сообщения: 959
Зарегистрирован: 16.11.2015 06:38:32

Re: APPCRASH как искать или как исправить?

Сообщение zub » 18.06.2016 16:14:45

>>и как получить "стек вызовов на момент ошибки"?
Самый простой: Собрать программу с отладочной инфой. Запустить ее под GDB. Дождаться вылета или справоцировать вылет. Ввести bt. http://wiki.freepascal.org/Creating_a_B ... e_with_GDB
Элементарный способ проверки на утечки - посматривать в диспетчере задачь за динамикой отъедания вашей программой памяти у системы. Если вылет происходит по причине окончания памяти - это быдет видно.
Последний раз редактировалось zub 18.06.2016 16:18:00, всего редактировалось 1 раз.
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

Re: APPCRASH как искать или как исправить?

Сообщение pupsik » 18.06.2016 16:16:51

Код: Выделить всё
  Result := '';
  try
    St:= TStringList.Create;
    try
      St.LoadFromFile(FName);
     Result:= St.Text
    except
      //обработка исключения
   end;
  finally
    St.Free
end;
Последний раз редактировалось pupsik 18.06.2016 16:18:02, всего редактировалось 1 раз.
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: APPCRASH как искать или как исправить?

Сообщение zub » 18.06.2016 16:17:04

Код: Выделить всё
  St:= TStringList.Create;
  try
    St.LoadFromFile(FName);
    Result:= St.Text
  finally
    St.Free
    end

Этот способ конечно рабочий, но содержит в себе кучу "ненужных" действий. Почему просто не выделить в Result нужный размер и не прочитать туда файл одним куском?
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

Re: APPCRASH как искать или как исправить?

Сообщение pupsik » 18.06.2016 16:19:28

zub
туда файл одним куском?
=
нет, крайне долго.
:mrgreen:

Добавлено спустя 3 минуты 7 секунд:
по поводу StringList - простое предположение... Возможно ошибка иная....
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: APPCRASH как искать или как исправить?

Сообщение azsx » 18.06.2016 16:24:01

Загрузили 100 метровый файлик, получили исключение, а программа работает и грузить новую порцию. И так несколько раз подряд...
Напрашивается странный вопрос: как среагирует система на подобное???

в реальности файлы занимают мегабайты, обычно килобайты и по логике там исключений на чтение быть не должно. Но я проверю.
Зашел в процедуру, инициализировал объект, считал - передал результат вышел с процедуры. Разве TStringList после выхода с процедуры остался в оперативной памяти?
azsx
энтузиаст
 
Сообщения: 959
Зарегистрирован: 16.11.2015 06:38:32

Re: APPCRASH как искать или как исправить?

Сообщение Лекс Айрин » 18.06.2016 16:26:27

azsx писал(а):Разве TStringList после выхода с процедуры остался в оперативной памяти?


может и остаться... рекомендуется очищать явно.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: APPCRASH как искать или как исправить?

Сообщение zub » 18.06.2016 16:26:58

pupsik писал(а): zub
туда файл одним куском?
=
нет, крайне долго.
:mrgreen:

Добавлено спустя 3 минуты 7 секунд:
по поводу StringList - простое предположение... Возможно ошибка иная....

Как может самый быстрый способ чтения файла (влязящего в память 1м куском) медленнее кучи ненужных прокладок?
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

Re: APPCRASH как искать или как исправить?

Сообщение pupsik » 18.06.2016 16:28:19

в реальности файлы занимают мегабайты
возможно поэтому не столь быстро "срабатывает"?
Разве TStringList после выхода с процедуры остался в оперативной памяти?
В процедуре его создали, исключение.... он остался "мёртвым грузом", прога работает. Освобождается только после выхода из программы.

Повторяю: не зацикливайтесь... Возможно ошибка в ином.

п.с.
zub а это не я писал... Выше посмотрите :D
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: APPCRASH как искать или как исправить?

Сообщение azsx » 18.06.2016 16:32:21

pupsik спасибо, я ошибся. Надо попробовать (заодно посмотрю есть ли там исключения).
Почему просто не выделить в Result нужный размер и не прочитать туда файл одним куском?

потому что это очень небольшой участок программы. Когда обработка переменной была проще и файлы формировались на другом компе я сотнями тысяч обрабатывал файлов в сутки. На практике способ с чтением через TStringList оказался самым быстрым. По сути я не разбирался почему другие методы мне показались медленее.
azsx
энтузиаст
 
Сообщения: 959
Зарегистрирован: 16.11.2015 06:38:32

Re: APPCRASH как искать или как исправить?

Сообщение zub » 18.06.2016 16:37:27

Ок. завязываем телепатировать и ждем от ТС отчета heaptrc и стека. Там всё станет ясно
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

Пред.След.

Вернуться в Общее

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

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

Рейтинг@Mail.ru