Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TStringList что то начал терять функционал / 25 сообщений из 46, страница 1 из 2
25.04.2018, 10:17
    #39635856
Pcrepair
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TStringList что то начал терять функционал
Добрый день. Непонятное со списком :

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
if OpenDialog.Execute then
  begin
    FilePath:=OpenDialog.FileName;
  end;

...

Lst:=TStringList.Create;
    try
       { AssignFile(FileStr,FileName);
        Reset(FileStr);
        while not Eof(FileStr) do
        begin
          ReadLn(FileStr,TextStr);   
          Lst.Add(TextStr);
        end;
        CloseFile(FileStr); }

        Lst.LoadFromFile(FilePath);

        ShowMessage(Lst.Text);
    finally
      FreeAndNil(Lst);
    end;


в обоих случаях при Lst.Add() выскакивает исключение(ведущее в никуда SysUtils) при загрузке очередной строки из файла(текст)
но если открыть новый проект и там все это прописать то все работает (ХЕ3)

Вопрос: что такое и где может слететь с катушек в проекте чтобы выскочил такой косячок?
...
Рейтинг: 0 / 0
25.04.2018, 10:32
    #39635870
krapotkin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TStringList что то начал терять функционал
первые байты в файле не FFFE ?
...
Рейтинг: 0 / 0
25.04.2018, 10:39
    #39635878
Соколинский Борис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TStringList что то начал терять функционал
Pcrepair,
Память где-то испорчена.
...
Рейтинг: 0 / 0
25.04.2018, 16:24
    #39636172
GunSmoker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TStringList что то начал терять функционал
Pcrepairвыскакивает исключение(ведущее в никуда SysUtils)

Какое точно исключение и куда точно ведёт? Как определили, что на Lst.Add? Как стоит опция I/O Errors? Телепатов тут нет.
...
Рейтинг: 0 / 0
25.04.2018, 16:53
    #39636219
Pcrepair
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TStringList что то начал терять функционал
Дополнительно(информация к размышлению) :
если Memo1.Text:=Lst.Text; тогда косяка нет
если ShowMessage(Lst.Text); тогда косяк есть но только на некоторых файлах

Какое точно исключение и куда точно ведёт? Как определили, что на Lst.Add? Как стоит опция I/O Errors? Телепатов тут нет.


First chance exception at $000014BC. Exception class $C0000005 with message 'access violation at 0x000014bc: read of address 0x000014bc'. Process Func2.exe (1108)

это предположительно, строк в файле много и исключение выскакивает всякий раз на кнопочке ПРОДОЛЖИТЬ, а если нажать БРИК тогда
sysutuls.pas
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
begin
  ErrorCode := Byte(MapException(P));
  case ErrorCode of
    3..10, 12..21:
      E := ExceptTypes[ExceptMap[ErrorCode].EClass].Create(ExceptMap[ErrorCode].EIdent);
    11: E := CreateAVObject;
  else
    E := EExternalException.CreateFmt(SExternalException, [P.ExceptionCode]);
  end;
  if E is EExternal then EExternal(E).ExceptionRecord := P;
  E.RaisingException(P);
{$IFDEF AUTOREFCOUNT}
  E.__ObjAddRef;
{$ENDIF}
  Result := IntPtr(E);
end;



насчет входы-выхода ошибок пока не в курсе где это

и да, жаль что телепатов нет.
...
Рейтинг: 0 / 0
25.04.2018, 16:59
    #39636226
Pcrepair
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TStringList что то начал терять функционал
Код: pascal
1.
11: E := CreateAVObject;
...
Рейтинг: 0 / 0
25.04.2018, 17:05
    #39636232
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TStringList что то начал терять функционал
PcrepairFirst chance exception at $000014BC. Exception class $C0000005 with message 'access
violation at 0x000014bc: read of address 0x000014bc'.

Где-то ты портишь память. Включай полный отладочный режим менеджера памяти и отлаживайся.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25.04.2018, 17:16
    #39636239
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TStringList что то начал терять функционал
Pcrepair,

У тебя программа большая? Может ты ее сюда под спойлер выложишь?
...
Рейтинг: 0 / 0
25.04.2018, 17:59
    #39636283
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TStringList что то начал терять функционал
Pcrepair,

дополнительные потоки может есть? или в основном всё? попробуй включить отладочную информацию по максимуму - то есть обнаружение границ и переполнения.
...
Рейтинг: 0 / 0
25.04.2018, 18:59
    #39636314
GunSmoker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TStringList что то начал терять функционал
Больше похоже на повреждение стека. Я бы проверил все нетипизированные переменные/параметры и буфера. Вон там код с file - его в первую очередь смотреть. Для быстрой проверки можно все локальные переменные сделать глобальными.
...
Рейтинг: 0 / 0
25.04.2018, 19:01
    #39636316
GunSmoker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TStringList что то начал терять функционал
Pcrepairэто предположительно, строк в файле много и исключение выскакивает всякий раз на кнопочке ПРОДОЛЖИТЬ, а если нажать БРИК тогда

А Call Stack что показывает?

Pcrepairнасчет входы-выхода ошибок пока не в курсе где это

https://www.gunsmoker.ru/2011/10/pascal.html#errors

Впрочем, уже, наверное, не актуально (раз возбуждается Access Violation, а не I/O Error).
...
Рейтинг: 0 / 0
25.04.2018, 20:40
    #39636369
Pcrepair
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TStringList что то начал терять функционал
А Call Stack что показывает?
тут картинка
потоков нет, программа вся : МЕМО + Баттон
...
Рейтинг: 0 / 0
25.04.2018, 20:57
    #39636375
GunSmoker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TStringList что то начал терять функционал
Странно, на скриншоте - минимум четыре исключения. А где уведомления отладчика о первых трёх исключениях?

По факту получается, что возникает исключение (предположительно - A/V), RTL Delphi пытается создать для него объект EAccessViolation и - обламывается. Возникает второе исключение, RTL Delphi пытается создать для него объект EAccessViolation и - снова обламывается. Возникает третье исключение, RTL Delphi пытается создать для него объект EAccessViolation - и обламывается в очередной раз. Но в этот раз мы встали в отладчике.

Серьёзный кирдык чему-то в программе.

Я бы включил опцию "Use Debug DCUs", сделал полный Build (не Compile), поставил бряк на GetExceptionObject из SysUtils и прошёл бы её по шагам.

Сообщение "access violation at 0x000014bc: read of address 0x000014bc" говорит о том, что управление ушло по мусорному указателю. Буквально:
Код: pascal
1.
2.
Proc := Pointer($14bc);
Proc; // - вылетаем тут


Пока не видно, как такое может быть при простом повреждении данных в GetExceptionObject.
...
Рейтинг: 0 / 0
25.04.2018, 20:58
    #39636376
GunSmoker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TStringList что то начал терять функционал
Pcrepairпотоков нет, программа вся : МЕМО + Баттон

Выложи.
...
Рейтинг: 0 / 0
25.04.2018, 21:09
    #39636381
Pcrepair
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TStringList что то начал терять функционал
и все таки если в коде есть ShowMessage(VAR); тогда вся эта бодяга начинается. стоит убрать вывод в ShowMessage списка с большим числом строк (1500 допустим, чиста для убедится что ПЕРЕМ не пустая)

ShowMessage оно Vcl.Dialogs, там же и TOpenDialog который есть на форме.
конечно это простой подход к пониманию проблемы, но вот это
авторЯ бы включил опцию "Use Debug DCUs", сделал полный Build (не Compile), поставил бряк на GetExceptionObject из SysUtils и прошёл бы её по шагам.

такое углубление пока нежелательно
программа крайне проста и ранее всегда все работало
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
unit uMain;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,
  IniFiles;

type
  TMain = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    OpenDialog: TOpenDialog;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Main: TMain;

implementation
{$R *.dfm}
Uses uFunc;

procedure TMain.Button1Click(Sender: TObject);
var
  FilePath:string;
  Lst:TStringList;
begin
  if OpenDialog.Execute then
  begin
    FilePath:=OpenDialog.FileName;  //ShowMessage(FilePath);  // тут тоже никаких проблем
  end;

  //Memo1.Lines.LoadFromFile(FilePath);  // все прекрасно

  Lst:=TStringList.Create;
  try
    Lst.LoadFromFile(FilePath);
    //Memo1.Text:=Lst.Text;   //тут все атлично работает
    FilePath:=Lst.Text;           // ну тут на всякий случай, если без доп. ПЕРЕМ все то же
    ShowMessage(FilePath);    //а вот тут непонятное
  finally
    FreeAndNil(Lst);
  end;
end;


initialization
  ReportMemoryLeaksOnShutdown := True;
end.


какая то ерунда, давненько таких тупых проблем не было
...
Рейтинг: 0 / 0
25.04.2018, 21:21
    #39636384
GunSmoker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TStringList что то начал терять функционал
Pcrepair, в показаниях путаешься. То у тебя Lst.Add, то ShowMessage.

uFunc и IniFiles - это что? ShowMessage там переопределяется или нет?

P.S. Как бы понятно, что многие мегабайты текста в ShowMessage передавать - это не самая разумная идея, но указанного поведения только от этого быть не должно.
...
Рейтинг: 0 / 0
25.04.2018, 21:23
    #39636386
Pcrepair
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TStringList что то начал терять функционал
в общем если текстовый файл небольшой (300 строк) то без проблем, а если к примеру 1500 строк то уже сбой
может так и должно быть и ShowMessage просто не может вместить много строк? никто не в курсе?
...
Рейтинг: 0 / 0
25.04.2018, 21:28
    #39636387
Pcrepair
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TStringList что то начал терять функционал
uFunc и IniFiles - это что? ShowMessage там переопределяется или нет?

uFunc - просто ссылка на пустой модуль для функций и процедур
IniFiles - это кусочек для записи в ИНИ-файл, ну вот убрал из юзеров и ничего не поменялось

Pcrepair, в показаниях путаешься. То у тебя Lst.Add, то ShowMessage.
список похоже не причем. все косяки при попытке вывести в ShowMessage достаточно большой текст(большое число строк)
...
Рейтинг: 0 / 0
25.04.2018, 21:42
    #39636394
GunSmoker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TStringList что то начал терять функционал
Pcrepairно если открыть новый проект и там все это прописать то все работает (ХЕ3)

Манифест проверь ("Use runtime themes").
...
Рейтинг: 0 / 0
25.04.2018, 22:01
    #39636398
Pcrepair
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TStringList что то начал терять функционал
в runtime theme стоит Enable RunTime Theme

мда... удалил тему Смоки Кварц Камри и дефект пропал. но мне нужна какая то тема получше чем дефолтная ВЫНь

и что тут делать?
...
Рейтинг: 0 / 0
25.04.2018, 22:12
    #39636405
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TStringList что то начал терять функционал
Может что-то в самих файлах. Я, правда, не представляю из-за чего ShowMessage может так глючить, но мало ли.
...
Рейтинг: 0 / 0
25.04.2018, 22:16
    #39636407
Соколинский Борис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TStringList что то начал терять функционал
Pcrepairв общем если текстовый файл небольшой (300 строк) то без проблем, а если к примеру 1500 строк то уже сбой
может так и должно быть и ShowMessage просто не может вместить много строк? никто не в курсе?
Загоняю по полмиллиона, ничего не падает.
У тебя какой-то кусок кода память портит.
Напиши тестовую процедуру и вызывай по порядку работы.
...
Рейтинг: 0 / 0
25.04.2018, 22:22
    #39636409
Pcrepair
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TStringList что то начал терять функционал
и еще раз, отдельное спасибо GunSmoker
//-------------------
в runtime theme стоит Enable RunTime Theme
мда... удалил тему Смоки Кварц Камри и дефект пропал. но мне нужна какая то тема получше чем дефолтная ВЫНь
и что тут делать?
//------------------
...
Рейтинг: 0 / 0
25.04.2018, 22:36
    #39636415
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TStringList что то начал терять функционал
Pcrepair,

Pcrepair,

темы? бывает, поглюкивают. так жестко то не видел. смотри вот это:

https://github.com/RRUZ/vcl-styles-utils

может поможет
...
Рейтинг: 0 / 0
26.04.2018, 00:03
    #39636439
ziv-2014
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TStringList что то начал терять функционал
Pcrepair,
У меня тоже была проблема с темами, оказалось, что я писал за границы массива, в итоге страдали темы.
Скорее проблема не в этом, а где-то не корректно пишется в память.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TStringList что то начал терять функционал / 25 сообщений из 46, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]