Блог Александра Божко
Архивы
Рубрики

CodeSite

Даже поражаюсь, насколько активно использую данную систему логгирования в своих проектах. Научился использовать её и в мобильных приложениях и даже в Delphi 7. Но об этом – в следующий раз. А сейчас небольшой солюшн.

Некоторое время назад заметил, что на машинах с Windows 10 или Windows 8 внезапно перестали отображаться CodeSite логи. При чем если программа запускается из-под IDE, то всё работает как часы, а вот если бинарник запускается отдельно, то логи не пишутся. Обычно, я стартую IDE от имени Администратора, и я сразу же подумал, что одна из возможных проблем – недостаток привилегий. Собственно говоря, догадка оказалась верна. После запуска скомпилированного приложения с повышенными привилегиями логи начали отображаться. Но такой вариант запуска приложения не всегда можно использовать. Например, при отладке dll или сервисов запуск от имени администратора будет сложно сделать.

Решение оказалось на удивление простым. Возможно оно вам тоже пригодится.

В каталоге. в котором установлен CodeSite вам следует найти папку Tools. В ней содержится пакет для установки на клиентских ПК. Просто установите этот пакет на своей машине. Переустановленный CodeSite Live Viewer будет работать корректно. Если через некоторое время проблема повторится – переустановите пакет ещё раз.

Иногда, в процессе отладки приложения при работе с наборами данных бывает необходимо отобразить содержимое набора.  Это не всегда просто сделать, особенно, если DataSet формируется динамически в коде программы. Для того, что бы упростить задачу я написал специальную функцию, которая использует систему логгирования CodeSite.

procedure SendDataSet(aDataSet: TDataSet; aFields: TStrings = nil);
var
  I: Integer;+-
  sLogFldType, sLog: string;
  bm: TBookmark;
  bln: Boolean;
begin
  if not aDataSet.Active then
    Exit;

  sLog := '';
  sLogFldType := '';

  for I := 0 to aDataSet.Fields.Count - 1 do
  begin
    if not Assigned(aFields) then
      bln := True
    else
      bln := aFields.IndexOf(aDataSet.Fields[I].FieldName) > -1;

    if bln then
    begin
      sLog := sLog + Format('%s', [aDataSet.Fields[I].FieldName]) + ' | ';
      sLogFldType := sLogFldType + GetEnumName(TypeInfo(TFieldType),
        Ord(aDataSet.Fields[I].DataType)) + ' | ';
    end;
  end;

  CodeSite.SendNote(aDataSet.Name);
  CodeSite.Send('sLog', sLog);
  CodeSite.Send('sLogFldType', sLogFldType);

  bm := aDataSet.GetBookmark;
  aDataSet.DisableControls;

  aDataSet.First;

  while not aDataSet.Eof do
  begin
    sLog := '';
    for I := 0 to aDataSet.Fields.Count - 1 do
    begin
      if not Assigned(aFields) then
      begin
        sLog := sLog + ' | ' + aDataSet.Fields[I].AsString;
      end
      else
      begin
        if aFields.IndexOf(aDataSet.Fields[I].FieldName) > -1 then
          sLog := sLog + ' | ' + aDataSet.Fields[I].AsString;
      end;
    end;

    CodeSite.Send('sLog', sLog);
    aDataSet.Next;
  end;

  try
    if aDataSet.BookmarkValid(bm) then
      aDataSet.GotoBookMark(bm); //
  finally
    aDataSet.FreeBookMark(bm);
    aDataSet.EnableControls;
  end;

end;

Читать далее

Знаете кто такой Рэй Конопка (Ray Konopka)? Те, кто познакомился с Delphi в 90-х наверняка помнят его, прежде всего, по книге “Создание оригинальных компонент в среде Delphi“. Не смотря на то, что издатели пропустили ошибку в названии (в тексте она исправлена), на мой взгляд, это одна из лучших книг по Delphi. Собственно, во многом благодаря ей, я в свое время начал понимать и любить Delphi.

Думаю, многим также известно, что и по сей день Рэй Конопка активно популяризирует Delphi, является партнером Embarcadero и принимает участие во многих мероприятиях. Кроме того, он является президентом компании Raize Software, которая распространяет несколько весьма полезных для Delphi  разработчиков продуктов. Самый известный из них, пожалуй, CodeSite Logging System. Embarcadero редакция данного продукта (CodeSite Express) входит в состав RAD Studio, начиная с версии XE. Лично я стал использовать этот продукт, практически сразу.  Если же вы до сих пор не познакомились с ним, рекомендую прочесть обзор Владислава Баженова.

На самом деле CodeSite Logging System – продукт очень серьезный с очень впечатляющим функционалом. И даже урезанная Embarcadero редакция предоставляет разработчику достаточно возможностей для того, что бы не утруждаться написанием собственной системы логирования.

Те, кто следит за моим блогом, знают, что я занимаюсь разработкой продукта, который массово продается. Как следствие, у нашего продукта есть множество клиентов, в разных точках мира, говорящих на разных языках, использующих разной программного и аппаратное обеспечение. Естественно, периодически у наших клиентов могут возникать проблемы в работе приложения, требующие вмешательства разработчиков. Сегодня я расскажу, как при помощи CodeSite Logging можно существенно облегчить себе жизнь и упростить процесс “отлова” багов на машинах клиентов.

Читать далее

Продукты DevArt
Купить онлайн:



Читай русскоязычные Delphi блоги
Каталог блогов Blogdir.ru
Яндекс.Метрика