протоколирование и номер строки
От: Аноним  
Дата: 07.03.06 16:15
Оценка:
Народ подскажите возможно ли в протоколе событий указать имя модуля и номер строки где произошла запись в протокол? Спасибо
Re: протоколирование и номер строки
От: wellwell Австралия https://www.softperfect.com
Дата: 07.03.06 16:28
Оценка:
"Аноним" <0@users.rsdn.ru> wrote in message news:1758066@news.rsdn.ru...
> Народ подскажите возможно ли в протоколе событий указать имя модуля и номер строки где произошла запись в протокол? Спасибо

 try
  Assert(False);
 except
  on E : Exception do LogMessage(e.Message);
 end;
Posted via RSDN NNTP Server 2.0
Re[2]: протоколирование и номер строки
От: Аноним  
Дата: 07.03.06 16:38
Оценка:
Здравствуйте, wellwell, Вы писали:

W>"Аноним" <0@users.rsdn.ru> wrote in message news:1758066@news.rsdn.ru...

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

W>
W> try
W>  Assert(False);
W> except
W>  on E : Exception do LogMessage(e.Message);
W> end;
W>


я имел ввиду есть ли аналог как в VC директива __LINE__
Re[3]: протоколирование и номер строки
От: Danchik Украина  
Дата: 07.03.06 17:26
Оценка:
Здравствуйте, Аноним, Вы писали:

[Skip]

А>я имел ввиду есть ли аналог как в VC директива __LINE__


Качаем JEDI Code Library.
Курим в сторону JCLDebug.pas JclHookExcept.pas. В проэкте для линковки включите include TD32 debug info (это один из вариантов)
Re[4]: протоколирование и номер строки
От: Arioch2  
Дата: 07.03.06 21:56
Оценка:
> Курим в сторону JCLDebug.pas JclHookExcept.pas. В проэкте для линковки
> включите include TD32 debug info (это один из вариантов)

Это плохой вариантт — exe увеличится на 100-150%

Лучше зайтив меня Project и поставти ьгалочку Include JCL Debug Info


--
Написано в Opera:
http://www.myopera.net/students/30_days/comoperalover711ru.html
Posted via RSDN NNTP Server 2.0
Re[5]: протоколирование и номер строки
От: Аноним  
Дата: 08.03.06 07:22
Оценка:
Здравствуйте, Arioch2, Вы писали:

>> Курим в сторону JCLDebug.pas JclHookExcept.pas. В проэкте для линковки

>> включите include TD32 debug info (это один из вариантов)

A>Это плохой вариантт — exe увеличится на 100-150%


A>Лучше зайтив меня Project и поставти ьгалочку Include JCL Debug Info



то есть без внешней библиотеки никак? жаль как то недоверяю я сторонним библиотекам, vcl то вроде всю вдоль и поперек излазил
Re[6]: протоколирование и номер строки
От: ekamaloff Великобритания  
Дата: 08.03.06 07:58
Оценка: 3 (1)
Здравствуйте, Аноним, Вы писали:

А>то есть без внешней библиотеки никак? жаль как то недоверяю я сторонним библиотекам, vcl то вроде всю вдоль и поперек излазил


Есть совершенно извращенческий способ:

unit Test;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
  TTestForm = class(TForm)
    procedure FormCreate(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TTestForm.FormCreate(Sender: TObject);
begin
    Assert(False, 'Some log message');
end;

procedure LogMessage(const Message, FileName: string; LineNumber: Integer;
    ErrorAddr: Pointer);
begin
    ShowMessage(Format('Message: %s'#13'FileName: %s'#13'LineNumber: %d',
        [Message, FileName, LineNumber]));
end;

var
    OldAssertErrorProc: Pointer;

initialization
    OldAssertErrorProc := AssertErrorProc;
    AssertErrorProc := @LogMessage;

finalization
    AssertErrorProc := OldAssertErrorProc;

end.


Советую лучше воспользоваться сторонней библиотекой
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
Re: протоколирование и номер строки
От: S.Sapronov Россия  
Дата: 08.03.06 08:22
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Народ подскажите возможно ли в протоколе событий указать имя модуля и номер строки где произошла запись в протокол? Спасибо


Если суть дела, протоколирование ошибок программы, то советую прочитать статью http://www.delphimaster.ru/articles/errors/index.html
Кстати, там советуют НЕ использовать в сообщениях об ошибках имя модуля и номер строки:

При разработке программы вы будете выпускать десятки и десятки версий, и естественно, что исходный код будет сильно модифицироваться, а номера линий, на которых располагаются проверочные вызовы, будут постоянно изменяться. И если вдруг ваш пользователь сообщает о том, что в вашей программе сработала проверка на линии N в исходном модуле M, вы должны задаться вопросом, какая версия программы находится у пользователя? Даже если вы сохраните все исходные тексты абсолютно всех версий, такой подход нельзя назвать удобным и ясным, он таит в себе скрытую путаницу и неразбериху, поскольку вам придется отслеживать номера строк в разных версиях программы при просмотре развития программы.

с данной цитатой согласен полностью ... проверено на себе
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re[2]: протоколирование и номер строки
От: ekamaloff Великобритания  
Дата: 08.03.06 08:30
Оценка:
Здравствуйте, S.Sapronov, Вы писали:

SS>с данной цитатой согласен полностью ... проверено на себе


Моя практика напротив показывает, что по-крайней мере в отладочных целях наличие возможности записи в протокол названия модуля и номера строки было бы крайне удобно. В этом плане delphi очень не хватает нормального препроцессора, благодаря которому в C/C++ возможны __LINE__, __FILE__, __FUNCSIG__ и т.п. В-общем с вышеприведенной цитатой полностью не согласен
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
Re[7]: протоколирование и номер строки
От: Аноним  
Дата: 08.03.06 09:45
Оценка: +1
Здравствуйте, ekamaloff, Вы писали:

E>Здравствуйте, Аноним, Вы писали:


А>>то есть без внешней библиотеки никак? жаль как то недоверяю я сторонним библиотекам, vcl то вроде всю вдоль и поперек излазил


E>Есть совершенно извращенческий способ:


E>
E>unit Test;

E>interface

E>uses
E>  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

E>type
E>  TTestForm = class(TForm)
E>    procedure FormCreate(Sender: TObject);
E>  end;

E>var
E>  Form1: TForm1;

E>implementation

E>{$R *.DFM}

E>procedure TTestForm.FormCreate(Sender: TObject);
E>begin
E>    Assert(False, 'Some log message');
E>end;

E>procedure LogMessage(const Message, FileName: string; LineNumber: Integer;
E>    ErrorAddr: Pointer);
E>begin
E>    ShowMessage(Format('Message: %s'#13'FileName: %s'#13'LineNumber: %d',
E>        [Message, FileName, LineNumber]));
E>end;

E>var
E>    OldAssertErrorProc: Pointer;

E>initialization
E>    OldAssertErrorProc := AssertErrorProc;
E>    AssertErrorProc := @LogMessage;

E>finalization
E>    AssertErrorProc := OldAssertErrorProc;

E>end.
E>


E>Советую лучше воспользоваться сторонней библиотекой


Спасибо за ответ
Я недавно начал читать этот сайт надо бы наверное зарегистрироваться инаучиться оценки ставить
Re[8]: протоколирование и номер строки
От: ekamaloff Великобритания  
Дата: 08.03.06 09:54
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Я недавно начал читать этот сайт надо бы наверное зарегистрироваться инаучиться оценки ставить


Угу, и еще перестать оверквотить

ЗЫ: только без обид, я в шутку. Но, как говорится, в каждой шутке есть доля шутки...
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
Re[9]: протоколирование и номер строки
От: vasilef Россия  
Дата: 08.03.06 13:20
Оценка: 1 (1) +1 :)
Здравствуйте, ekamaloff, Вы писали:

зарегистрировался!
Best regards
Re[5]: протоколирование и номер строки
От: Danchik Украина  
Дата: 08.03.06 13:40
Оценка:
Здравствуйте, Arioch2, Вы писали:

>> Курим в сторону JCLDebug.pas JclHookExcept.pas. В проэкте для линковки

>> включите include TD32 debug info (это один из вариантов)

A>Это плохой вариантт — exe увеличится на 100-150%


A>Лучше зайтив меня Project и поставти ьгалочку Include JCL Debug Info


Я же написал что это один из вариантов об остальных я неплохо осведомлен
Автор: Danchik
Дата: 28.11.05
Re[3]: протоколирование и номер строки
От: Аноним  
Дата: 08.03.06 14:07
Оценка:
Здравствуйте, ekamaloff, Вы писали:

Полностью присоединяюсь. Протоколирование с помощью _LINE_ и т.д. действительно удобная вещь.
А чтобы не путаться с номерами версий всегда можно указать этот номер в протоколе
Re[4]: протоколирование и номер строки
От: vasilef Россия  
Дата: 08.03.06 14:08
Оценка:
Пардон это я был, еще не привыкну
Best regards
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.