Jump to content
View in the app

A better way to browse. Learn more.

FGX Native

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Здравствуйте.
В этой статье мы поговорим об отладке приложений на iOS с помощью логирования (часть материала будет актуальна и для Android). 

Общие сведения.
Логирование позволяет получать информацию о работе вашего приложении даже когда оно запущено без отладчика, при фатальных падениях приложения и тд. 
Особенно тема логирования актуальна для мобильных платформ, т.к. здесь, к сожалению, Delphi отладчик не может похвастаться такой же стабильностью и качеством, как отладчик для платформы Win32. Пошаговая отладка выливается в мучительное ожидание переходов, показываемые отладчиком значения могут не соответствовать действительности, либо вообще отсутствовать и тд. 

Важно! Логирование не заменяет полностью отладчик, а является вспомогательным инструментом. 

Условно механизм логирования можно разделить на источник логов и на утилиты для сборки и просмотра логов.

Источники логов.

Источником логов может быть как библиотека FGX Native, операционная система, так и само приложение (сообщения отправленные непосредственно разработчиком). На первые два варианта разработчик особо не может повлиять, поэтому более подробно остановимся на третьем варианте.

Отправка сообщения в лог осуществляется с помощью кроссплатформенного класса TfgLog. Все методы TfgLog являются классовыми, а сам класс существует в единственном экземпляре - это означает, что для его использования нет необходимости создавать экземпляр класса. 

Основным методом класса является метод Log позволяющий отправить строку с указанным уровнем лога.

    /// <summary>Выводит в системный лог сообщение <c>AMessage</c> типа <c>ALogType</c>.</summary>
    class procedure Log(const ALevel: TfgLogLevel; const AMessage: string);

Уровни лога определяют степень важности того или иного события.

  /// <summary>Уровень логирования.</summary>
  TfgLogLevel = (Trace, Debug, Info, Warning, Error, Fatal);

Вы можете определить минимальный уровень лога с помощью свойства MinimumLevel, чтобы уменьшить количество выводимых в лог сообщений

    /// <summary>
    ///   Указывает минимальный уровень лога, начиная с которого сообщение будет выводиться в системный лог.
    ///   Порядок следования уровней: Debug, Info, Warning, Error, Fatal. Debug - самый низкий.
    /// </summary>
    /// <remarks>
    ///   Для <c>DEBUG</c> конфигурации выводятся все типы сообщений по умолчанию. Для <c>RELEASE</c> сообщений выше
    ///   <c>Info</c>. Если вы хотите видеть в релизной сборке вашего приложения и отладочные сообщения, то задайте
    ///   значение <c>TfgLogLevel.Debug</c> в это свойство. Данная настройка распространяется только на этот класс. На
    ///   логирование через сервис <c>IFGXLoggerService</c> она не действует.
    /// </remarks>
    class property MinimumLevel: TfgLogLevel read FMinimumLogLevel write FMinimumLogLevel;

Для удобства у класса TfgLog есть набор одноименных методов, соответствующих каждому уровню лога. Например:

    /// <summary>
    ///   Выводит в системный лог низкоуровневое отладочное сообщение <c>AMessage</c> для выполнения трассировки.
    /// </summary>
    class procedure Trace(const AMessage: string); overload;
    /// <summary>Выводит в системный лог отладочное сообщение <c>AMessage</c>.</summary>
    class procedure Debug(const AMessage: string); overload;

В дополнение, у каждого такого метода существует перегруженная версия, принимающая во втором аргументе список параметров для отправки форматированной строки:

    /// <summary>
    ///   Выводит в системный лог низкоуровневое отладочное сообщение <c>AMessage</c> с поддержкой форматирования <c>System.Format</c>.
    /// </summary>
    class procedure Trace(const AFormat: string; const Args: array of const); overload;
    /// <summary>
    ///   Выводит в системный лог отладочное сообщение <c>AMessage</c> с поддержкой форматирования <c>System.Format</c>.
    /// </summary>
    class procedure Debug(const AFormat: string; const Args: array of const); overload;


Сборка и просмотр логов.

Для просмотра логов с iOS используется утилита, работающая на компьютере под управлением macOS под названием Console.
Для просмотра логов с Android используется утилита работающая на компьютере под управлением Windows под названием logcat.
Частично логирование в контексте Android было затронуто ранее в Уроке 1 «Настройка окружения, Hello World приложение и логирование».
В данной статье мы сосредоточимся на утилите Console.

Важно! Подразумевается, что вы имеете настроенную связку: компьютер под управлением macOS к которому подключено устройство с iOS

Исходные данные: на устройстве с iOS установлено приложение под названием TestLogging, которое имеет только две кнопки, при нажатии на которые отправляются сообщения в системный лог.
Код выглядит следующим образом:

uses
  System.SysUtils, FGX.Application, FGX.Dialogs, FGX.Log;

procedure TFormMain.fgButton1Tap(Sender: TObject);
begin
  TfgLog.Debug('Hello from TfgLog.Debug');
end;

procedure TFormMain.fgButton2Tap(Sender: TObject);
begin
  TfgLog.Info('Hello from TfgLog.Info');
end;

Теперь перейдем непосредственно к утилите сбора и просмотра логов.
Запустите утилиту Console которая находится в Launchpad -> Other.

tg_image_3706212814.jpeg

 

Главное окно состоит из меню навигации в левой части (1), тулбара с органами управления вверху (2) и списка логов, который занимают остальную клиентскую область окна (3).

tg_image_133399642.jpeg

 

Теперь выбираем в меню навигации слева устройство из списка Devices с которого мы хотим получать логи. В нашем случае это устройство с именем IPhone.

tg_image_196408901.jpg

 

Теперь запускаем сбор логов с помощью кнопки тулбара Start или кликнув по ссылке Start streaming находящейся в центре списка логов.

tg_image_133399641.jpg

После старта список логов будет быстро наполняться сообщениями. 
Список логов представляет собой таблицу с настраиваемыми колонками. Вы можете настроить видимость колонок по своему усмотрению с помощью контекстного меню, вызываемого по клику на заголовки таблицы.

tg_image_196408903.jpg

 

Самая полезная для нас информация находится в колонке Message - это непосредственно текстовое сообщение лога. Более удобно текстовое сообщение просматривать в окне детальной информации, которое можно открыть двойным кликом по строке списка логов, либо с помощью кнопки тулбара Info.

tg_image_4251286926.jpeg

Теперь запустим наше тестовое приложение и последовательно нажмем обе кнопки.

Лог содежит тысячи записей, среди которых практически невозможно найти интересующие нас строки.  Для решения этой задачи существуют фильтры, которые располагаются в правой части тулбара. Механизм фильтрация довольно гибкий и позволяет комбинировать несколько фильтров по разным колонкам с учетом выбранного способа сравнения (частичное или полное совпадение включая вариант с отрицанием).

Важно! Фильтрация осуществляется без учета регистра.

Есть несколько способов, как можно отобразить только те строки, которые относятся к нашему приложению. Самый простой вариант - отфильтровать по имени процесса. Вводим фразу TestLogging в окно Search и нажимаем клавишу Enter на клавиатуре. По-умолчанию создастся фильтр с типом Any и способом сравнения Containts. Теперь изменим тип фильтра с Any на Process, a Containts на Equal, что означает, что в списке логов останутся только те строки, текст которых в колоноке равен  TestLogging

tg_image_1332426471.jpg

На скриншоте видно, как строки переданные самой библиотекой FGX Native, так и те, которые были отправлены после нажатия на кнопки (отмечены стрелками). Теперь вы можете изучать собранную информацию просматривая сообщения. При необходимости вы можете сохранить выделенные строки в буфер обмена, либо передать их в другое приложение к помощью кнопки тулбара Share.

 

Логирование - мощный инструмент, который может пригодиться в самых трудных и запутанных ситуациях при поиске ошибок. 

Спасибо за внимание и удачной отладки!

 

0 Comments

Recommended Comments

There are no comments to display.

Recently Browsing 0

  • No registered users viewing this page.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.