powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Не работает try except на Андроиде 7.0
25 сообщений из 49, страница 1 из 2
Не работает try except на Андроиде 7.0
    #40047055
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Delphi 8 (RAD)

Не работает try except на Андроиде 7.0
При возникновении ошибки приложение вылетает без сообщения.

Есть какие-то варианты ловить ошибку на Андроиде?
...
Рейтинг: 0 / 0
Не работает try except на Андроиде 7.0
    #40047061
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rb,

Какое исключение-то? Если аппаратное, то смотрти доку .
...
Рейтинг: 0 / 0
Не работает try except на Андроиде 7.0
    #40047068
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот такое исключение

Код: pascal
1.
2.
3.
4.
5.
  try
    INI := TINIFile.Create('test.ini');
  except on e: exception do
    ShowMessage(e.Message);
  end;
...
Рейтинг: 0 / 0
Не работает try except на Андроиде 7.0
    #40047072
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

Интересно что им помешало сделать невидимый фиктивный вызов функции внутри try/except на анроиде?
...
Рейтинг: 0 / 0
Не работает try except на Андроиде 7.0
    #40047075
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rb
Вот такое исключение

Класc какой?

rgreat
Интересно что им помешало сделать невидимый фиктивный вызов функции внутри try/except на анроиде?

Видимо то же, что помешало и оптимизации ллвм'овские использовать. Это, кстати, не только ведроида касается, а вообще всех некстгенов.
...
Рейтинг: 0 / 0
Не работает try except на Андроиде 7.0
    #40047076
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey
Sergey_rb
Вот такое исключение

Класc какой?

rgreat
Интересно что им помешало сделать невидимый фиктивный вызов функции внутри try/except на анроиде?

Видимо то же, что помешало и оптимизации ллвм'овские использовать. Это, кстати, не только ведроида касается, а вообще всех некстгенов.


Класс
Код: pascal
1.
TINIFile
...
Рейтинг: 0 / 0
Не работает try except на Андроиде 7.0
    #40047077
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
Kazantsev Alexey,

Интересно что им помешало сделать невидимый фиктивный вызов функции внутри try/except на анроиде?


Чтобы на Дельфи не писали, а переходили на Андроид студию.
...
Рейтинг: 0 / 0
Не работает try except на Андроиде 7.0
    #40047084
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey
Видимо то же, что помешало и оптимизации ллвм'овские использовать.

Ну оптимизации могут в теории и всякие сбои давать. Да и и так не высокую скорость работы компилятора снизить.
Могли это на потом оставить. Это все не столь важно, в общем.

А вот ненадежная работа try/except это явная и заведомая ошибка архитектора.
...
Рейтинг: 0 / 0
Не работает try except на Андроиде 7.0
    #40047086
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Говорят, что до версии ведроида 6.0 try/except работал, значит умышленно убрали.
...
Рейтинг: 0 / 0
Не работает try except на Андроиде 7.0
    #40047093
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rb
Класс
Код: pascal
1.
TINIFile


Класс исключения.

rgreat
А вот костыль с try/except это явное заведомое упущение.

К слову, ни Oxygene, ни FPC c LLVM бэкендом такие исключения тоже не перехватывают, но в FPC эта задача значится в списке.
...
Рейтинг: 0 / 0
Не работает try except на Андроиде 7.0
    #40047095
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rb
Говорят, что до версии ведроида 6.0 try/except работал, значит умышленно убрали.

https://stackoverflow.com/questions/38243473/exception-handling-broken-in-delphi-xe8-android
...
Рейтинг: 0 / 0
Не работает try except на Андроиде 7.0
    #40047100
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

Типа в 10.4 пофиксили?
...
Рейтинг: 0 / 0
Не работает try except на Андроиде 7.0
    #40047103
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
Типа в 10.4 пофиксили?

Не, там о другом.
...
Рейтинг: 0 / 0
Не работает try except на Андроиде 7.0
    #40047126
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем надо решать вопрос, на чем писать для терминала сбора данных для Андроида.
...
Рейтинг: 0 / 0
Не работает try except на Андроиде 7.0
    #40047165
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://docwiki.embarcadero.com/RADStudio/Sydney/en/Migrating_Delphi_Code_to_Mobile_from_Desktop
раздел Use a Function Call in a try-except Block to Prevent Uncaught Hardware Exceptions

т.е. вместо

Код: pascal
1.
2.
3.
4.
5.
  try
    INI := TINIFile.Create('test.ini');
  except on e: exception do
    ShowMessage(e.Message);
  end;


делаешь
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  procedure T;
  begin
    INI := TINIFile.Create('test.ini');
  end;
   
  try
    T;
  except on e: exception do
    ShowMessage(e.Message);
  end;
...
Рейтинг: 0 / 0
Не работает try except на Андроиде 7.0
    #40047176
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asutp2,

Не прокатило, вылетел без сообщений

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
procedure TForm1.btnOkClick(Sender: TObject);
begin
  try
    LoadINI;
  except on e: exception do
    ShowMessage(e.Message);
  end;
end;

procedure TForm1.LoadINI;
var
  INI: TINIFile;
begin
    INI := TINIFile.Create('test.ini');
end;
...
Рейтинг: 0 / 0
Не работает try except на Андроиде 7.0
    #40047183
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rb,

отучитесь на андроиде использовать ShowMessage
...
Рейтинг: 0 / 0
Не работает try except на Андроиде 7.0
    #40047189
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asutp2
Sergey_rb,

отучитесь на андроиде использовать ShowMessage


Почему?
Сам по себе ShowMessage работает.
...
Рейтинг: 0 / 0
Не работает try except на Андроиде 7.0
    #40047190
inbox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я бы запустил проект под отладкой, и посмотрел почему не срабатывает исключение.


Без отладки вообще нечего делать, это как тыкать писей в пруд(Может поймаешь рыбку).
...
Рейтинг: 0 / 0
Не работает try except на Андроиде 7.0
    #40047195
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
inbox
Я бы запустил проект под отладкой, и посмотрел почему не срабатывает исключение.


Без отладки вообще нечего делать, это как тыкать писей в пруд(Может поймаешь рыбку).


Исключение не срабатывает из-за версий Delphi и Android.
...
Рейтинг: 0 / 0
Не работает try except на Андроиде 7.0
    #40047207
Фотография Kast2K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуйте так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
uses FMX.Helpers.Android;

procedure TTestForm.ShowInformationMessage(const AText: string);
  CallInUiThread (
        procedure
        begin
          TJToast.JavaClass.makeText (TAndroidHelper.Context,
              StrToJCharSequence(AText), TJToast.JavaClass.LENGTH_LONG).show;
        end
  );
end;
...
Рейтинг: 0 / 0
Не работает try except на Андроиде 7.0
    #40047208
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rb,

а кстати, какая именно версия делфи используется?)
...
Рейтинг: 0 / 0
Не работает try except на Андроиде 7.0
    #40047214
inbox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey_rb

Исключение не срабатывает из-за версий Delphi и Android.


Что такое исключение ? Давайте разберёмся для начало в этом.

Простой пример
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
uses
  System.SysUtils;

begin
  try
    Raise Exception.Create('Test Exception');
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;

end.



Отладчик говорит
Код: pascal
1.
2.
3.
4.
5.
6.
Project1.dpr.11: Raise Exception.Create('Test Exception');
0041E5A4 B940E64100       mov ecx,$0041e640
0041E5A9 B201             mov dl,$01
0041E5AB A130344100       mov eax,[$00413430]
0041E5B0 E847AAFFFF       call Exception.Create
0041E5B5 E84A85FEFF       call @RaiseExcept




То есть, создаётся класс, и вызывается RaiseExcept


По сути, нам надо отследить, что происходит при вызове

Код: 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.
procedure _RaiseAtExcept(Obj: TObject; Address: Pointer);
var
  Params: Array[0..6] of NativeUInt;
  ExceptionRecord: TExceptionRecord;
  //CurRaiseFrame: PRaiseFrame;
begin
  if Obj = nil then
    _RunError(216); // reAccessViolation

  Params[0] := UIntPtr(Address);
  Params[1] := UIntPtr(Pointer(Obj));
  Params[2] := 0 {EBX};
  Params[3] := 0 {ESI};
  Params[4] := 0 {EDI};
  Params[5] := 0 {EBP};
  Params[6] := 0 {ESP};

  if RaiseExceptObjProc <> nil then
  begin
    //CurRaiseFrame := RaiseListPtr;
    ExceptionRecord.ExceptionCode := cDelphiException;
    ExceptionRecord.ExceptionFlags := cNonContinuable;
    ExceptionRecord.ExceptionRecord := nil;
//  if CurRaiseFrame <> nil then
//    ExceptionRecord.ExceptionRecord := CurRaiseFrame^.ExceptionRecord;
    ExceptionRecord.ExceptionAddress := Address;
    ExceptionRecord.NumberParameters := 7;
    ExceptionRecord.ExceptionInformation[0] := Params[0];
    ExceptionRecord.ExceptionInformation[1] := Params[1];
    ExceptionRecord.ExceptionInformation[2] := Params[2];
    ExceptionRecord.ExceptionInformation[3] := Params[3];
    ExceptionRecord.ExceptionInformation[4] := Params[4];
    ExceptionRecord.ExceptionInformation[5] := Params[5];
    ExceptionRecord.ExceptionInformation[6] := Params[6];
    TRaiseExceptObjProc(RaiseExceptObjProc)(@ExceptionRecord);
  end;
  RaiseExceptionProc(cDelphiException, cNonContinuable, 7, @Params);
end;
...
Рейтинг: 0 / 0
Не работает try except на Андроиде 7.0
    #40047215
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asutp2
Sergey_rb,

а кстати, какая именно версия делфи используется?)


Delphi 8
Android 7.0

В первом посте написано...
...
Рейтинг: 0 / 0
Не работает try except на Андроиде 7.0
    #40047217
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rb
Delphi 8
Что-что?!
...
Рейтинг: 0 / 0
25 сообщений из 49, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Не работает try except на Андроиде 7.0
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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