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

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

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

yus
новенький
Сообщения: 27
Зарегистрирован: 29.03.2015 13:29:29
Откуда: Москва

Сообщение yus »

А если снять дамп в момент падения и поглядеть чего в нем?
Я вот только не знаю можно ли в лазарус работать с дампами, не приходилось.
azsx
энтузиаст
Сообщения: 959
Зарегистрирован: 16.11.2015 05:38:32

Сообщение azsx »

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

Код: Выделить всё

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 после чего идет вылет. Но как бы проверяю пока.
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

azsx, так проверяйте перед чтением файл на существование. FileExist/FileExistUTF8 в этом помогут.
pupsik
энтузиаст
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13
Контактная информация:

Сообщение pupsik »

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;
resident
энтузиаст
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Сообщение resident »

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

Я тему не читал, но может превышаете максимальное количество строк TStringList?
pupsik
энтузиаст
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13
Контактная информация:

Сообщение pupsik »

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