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

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

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

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

Сообщение yus » 20.06.2016 06:57:32

А если снять дамп в момент падения и поглядеть чего в нем?
Я вот только не знаю можно ли в лазарус работать с дампами, не приходилось.
yus
новенький
 
Сообщения: 27
Зарегистрирован: 29.03.2015 14:29:29
Откуда: Москва

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

Сообщение azsx » 20.06.2016 17:37:28

зафиксировал такие же зависания. Теперь совершенно ясно, что хотя я был абсолютно убежден, что файл будет всегда - оказывается не факт. Сменил код на такой:
Код: Выделить всё
function TextFileToString(const FName: TFileName): string;
var
  St: TStringList;
begin
    Result := '';
  try
    St:= TStringList.Create;
    try
      St.LoadFromFile(FName);
     Result:= St.Text
    except
      showmessage ('исключение');
      Result:= '';   // **************** добавил
   end;
  finally
    St.Free
  end;
end; 

пока чисто гадаю, что результ из библиотеки LAZUTF8 при чтении несуществующего файла передает чо то не то в insert и update в бд postgresql после чего идет вылет. Но как бы проверяю пока.
azsx
энтузиаст
 
Сообщения: 959
Зарегистрирован: 16.11.2015 06:38:32

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

Сообщение Лекс Айрин » 20.06.2016 18:12:15

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

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

Сообщение pupsik » 20.06.2016 19:55:40

azsx TStringList резвится? :)
Кстати... Пересмотрите более внимательно весь ваш код.
Просто из того что вы выложили "напрашиваются" нюансы.
Ваш код:
Код: Выделить всё
function GetFileSize(FileName: String): Int64;
var
  FS: TFileStream;
begin
  try
    FS := TFileStream.Create(Filename, fmOpenRead);
  except
    Result := -1;
  end;
  if Result <> -1 then Result := FS.Size;
  FS.Free;
end;

Надо бы сделать так:
Код: Выделить всё
function GetFileSize(FileName: String): Int64;
var
  FS: TFileStream;
begin
  Result := -1;
  try
    try
      FS := TFileStream.Create(Filename, fmOpenRead);
      Result := FS.Size;
    except
    ///обработка ошибки 
    finally
       FS.Free;
  end;
end;


Добавлено спустя 18 минут 20 секунд:
при чтении несуществующего файла передает
и каким образом вы тащите несуществующий файл? Т.е. у вас нет проверки перед вышеизложенными функциями?

Добавлено спустя 43 минуты 56 секунд:
Хотя: чем вас не устраивает функция FileSizeUtf8() из LazFileUtils?
Тогда будет проще:
Код: Выделить всё
function TextFileToString(const FName: TFileName): string;
var
  St: TStringList;
begin
  Result := '';
  if (FileSizeUtf8(FName) < {ваш размер}) and (FileExistsUTF8(FName)) then
  begin
    try
      St:= TStringList.Create;
      try
        St.LoadFromFile(FName);
        Result:= St.Text
      except
        showmessage ('исключение');
        Result:= '';   // **************** добавил
      end;
  finally
    St.Free
  end;
end;
end;
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

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

Сообщение resident » 20.06.2016 22:06:06

azsx писал(а):пока чисто гадаю

Я тему не читал, но может превышаете максимальное количество строк TStringList?
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

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

Сообщение pupsik » 21.06.2016 00:11:55

максимальное количество строк TStringList
вроде маленькие файлы. В принципе TStringList "тянет" пока память не оф, а потом... даун :)
Вполне возможно кириллица в путях, или имени. Вот и не грузит. Не знаю как сейчас в винде. Ранее TStringList "пугался" кириллицу. приходилось "напутствовать" на путь истинный :lol:
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Пред.

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

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

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

Рейтинг@Mail.ru