Поставил Lazarus 2.0.10 + FPC 3.2 версия 64351M на Linux (ставил через fpcdelux как стабильную) и версия 63526 на Windows ставил инсталлятором с официальной раздачи на SourceForge.
Собрал свои проекты и обнаружил что все вызовы procedure TSTrings.SaveToStream(S: TStream) приводят к AccessViolation
Сам TSTrings.SaveToStream(S: TStream) вызывает procedure TStrings.SaveToStream(Stream: TStream; IgnoreEncoding: Boolean); Где IgnoreEncoding передается как False, Если IgnoreEncoding заменить на True то всё работает.
То же самое с TSTring.LoadFromFile.
Чё ито? Кто то столкнулся ещё с этим?
Мне надо принять какое то решение, то ли на предыдущем Lazarus и FPC оставаться, то ли как то бороться с этим.
Lazarus 2.0.10 + FPC 3.2 TSTrings.SaveToStream
Модератор: Модераторы
Ну, для начала, я б посоветовал не использовать TStrings метод напрямую, а только через TStringList. Во-вторых, если считаете это ошибкой, пишите багрепорт.
- Ichthyander
- энтузиаст
- Сообщения: 701
- Зарегистрирован: 04.04.2007 08:32:43
- Откуда: Астрахань
- Контактная информация:
TStrings же никогда нельзя было напрямую использовать?
- *Rik*
- постоялец
- Сообщения: 453
- Зарегистрирован: 19.04.2011 12:18:51
- Откуда: Урал
- Контактная информация:
На самом деле используется TStringList, при этом попытался создать тестовый проект новый, самый простетский, в нем всё работает, а в старом большом проекте такая вот фигня, при чем в предыдущей версии Lazarus и FPC, вообще ни каких проблем. проблема началась с перехода на FPC 3.2 и Lazarus 2.0.10.
Это бага в программе. Дебажиш, выясняеш где падает и почему. Емнип чтоб подебажить внутри TStringList - надо собрать fpc с отладочной инфой.
хрустальные шары мне шепчут что ты гдето установил для своего TSTrings Encoding или DefaultEncoding, потом убил их и пытаешся читатьписать убитым EncodingDefaultEncoding
Добавлено спустя 4 минуты 19 секунд:
>>Мне надо принять какое то решение, то ли на предыдущем Lazarus и FPC оставаться, то ли как то бороться с этим.
Что тут принимать, конечно переходишь на актуальную версию, правишь вскрывшиеся баги и адаптируешь под новые реалии
хрустальные шары мне шепчут что ты гдето установил для своего TSTrings Encoding или DefaultEncoding, потом убил их и пытаешся читатьписать убитым EncodingDefaultEncoding
Добавлено спустя 4 минуты 19 секунд:
>>Мне надо принять какое то решение, то ли на предыдущем Lazarus и FPC оставаться, то ли как то бороться с этим.
Что тут принимать, конечно переходишь на актуальную версию, правишь вскрывшиеся баги и адаптируешь под новые реалии
- *Rik*
- постоялец
- Сообщения: 453
- Зарегистрирован: 19.04.2011 12:18:51
- Откуда: Урал
- Контактная информация:
zub писал(а):Это бага в программе. Дебажиш, выясняеш где падает и почему. Емнип чтоб подебажить внутри TStringList - надо собрать fpc с отладочной инфой.
хрустальные шары мне шепчут что ты гдето установил для своего TSTrings Encoding или DefaultEncoding, потом убил их и пытаешся читатьписать убитым EncodingDefaultEncoding
Добавлено спустя 4 минуты 19 секунд:
>>Мне надо принять какое то решение, то ли на предыдущем Lazarus и FPC оставаться, то ли как то бороться с этим.
Что тут принимать, конечно переходишь на актуальную версию, правишь вскрывшиеся баги и адаптируешь под новые реалии
Проблема в DefaultEncoding, я его точно ни где не убивал, вообще только сейчас узнал что такое свойство появилось. Оно почему то = nil, если его указать явно, все работает. По какой то причине оно изначально не создается именно в большом старом проекте. Все вызовы TSTring.SaveToStream, TStrings.LoadFromStream, везде, включая все сторонние компоненты приводят к AV.
Код: Выделить всё
var
SL: TStringList;
F: TFileStream;
begin
SL := TStringList.Create;
if SL.DefaultEncoding = nil then
begin
ShowMessage('nil');
SL.DefaultEncoding = SL.Encoding.UTF8;
end;
F := TFileStream.Create(GetUserDir + DirectorySeparator + 'test.txt', fmCreate);
try
SL.Add('ыаыаыа);
SL.SaveToStream(F);
finally
SL.Free;
F.Free;
end;
end
Добавлено спустя 1 час 57 минут 19 секунд:
Переустановил всё по новой, почистил лишние файлы, проблема пропала. Походу глюк был...
