уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

При разработке приложений бывает иногда необходимо вывести какую-либо информацию в Event Log. В Delphi для этих целей удобно пользоваться методами OutputDebugString, но так как это путь исключительно для Windows, то в случае работы с Lazarus, например в Debian или Slax такой подход не подойдет. В Lazarus, для того чтобы вывести какое-либо сообщение при отладке приложения имеется несколько способов речь о которых пойдет далее.

Если всё-таки Windows?

Если Вы планируете использовать Lazarus исключительно в среде Windows и, то, в принципе, никто вам не мешает подключить в uses модуль Windows и продолжать пользоваться уже привычными методами OutputDebugString, правда ваши сообщения будут попадать не в окно «Сообщения» к которому мы привыкли в Delphi, а в отдельное под названием «Журнал событий». Чтобы добраться до журнала событий, необходимо открыть в меню «Вид — Окна отладки — Журнал событий»

С пользовательским сообщением журнал событий выглядит вот так:

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

Аналог OutputDebugString в Lazarus «из коробки»

Для пользователей Lazarus в Linux всё не на много сложнее. Дело в том, что в Lazarus присутствует модуль dbugintf.pas, выводить различные отладочные сообщения, правда опять же, в отдельном окне. Чтобы эта возможность заработала, необходимо выполнить следующие действия:

1.Собрать утилиту  debugserver, которая находится в папке с Lazarus по пути: %Lazarus%\tools\debugserver\

По сути, эта утилита сильно напоминает «Журнал событий», о котором шла речь выше. Вот как выглядит пустой debugserver:

2. Добавить debugserver в список внешних средств Lazarus. Для этого заходим в меню: Сервис — Настроить внешние средства:

добавить утилиту в список следующим образом:

Теперь debugserver появится в меню Lazarus:

3. Подключить в uses любого модуля вашего проекта модуль dbugintf и включить вывод сообщений в окно debugserver, используя следующий метод:

procedure SetDebuggingEnabled(const AValue : boolean);

Думаю, тут всё понятно и без комментариев — передача в метод значение True включается вывод сообщений, False — отключает. Для вывода различных сообщений в debugserver можно воспользоваться следующими методами:

procedure SendBoolean(const Identifier: string; const Value: Boolean);
procedure SendDateTime(const Identifier: string; const Value: TDateTime);
procedure SendInteger(const Identifier: string; const Value: Integer; HexNotation: Boolean = False);
procedure SendPointer(const Identifier: string; const Value: Pointer);
procedure SendDebugEx(const Msg: string; MType: TDebugLevel);
procedure SendDebug(const Msg: string);
procedure SendMethodEnter(const MethodName: string);
procedure SendMethodExit(const MethodName: string);
procedure SendSeparator;
procedure SendDebugFmt(const Msg: string; const Args: array of const);
procedure SendDebugFmtEx(const Msg: string; const Args: array of const; MType: TDebugLevel);

Чтобы продемонстрировать работу методов, напишем следующий тестовый код на Lazarus:

procedure TForm1.Button2Click(Sender: TObject);
var b: boolean;
    i: integer;
    d: TDateTime;
begin
  SetDebuggingEnabled(True);
  SendMethodEnter('Button2Click Enter');
  b:=True;
  SendBoolean('b',b);
  i:=100;
  SendInteger('i',i,False);
  SendInteger('i as hex',i,True);
  d:=Now;
  SendDateTime('d',d);
  SendSeparator;
  SendDebugEx('Это сообщение будет выглядеть в окне debugserver как ошибка', dlError);
  SendMethodExit('Button2Click Enter');
end;

Здесь мы воспользовались различными методами модуля dbugintf и отправили в debugserver несколько сообщений, которые будут выглядеть следующим образом:

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

Как видите, в Lazarus можно без проблем выводить отладочные сообщения практически так же, как мы привыкли делать это в Delphi за одним лишь различием в том, что в Lazarus это будет работать в любой операционной системе и, поэтому, требуется дополнительный шаг настройки утилиты debugserver.

На сегодня всё. Продолжаем разбираться с Lazarus и попутно в нем же работать :)

5 3 голоса
Рейтинг статьи
уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Подписаться
Уведомить о
0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии