Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Имя процедуры [D7, XP]


Lera ©   (2007-02-01 11:32:00) 

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


Olivetti   (2007-02-02 02:04:00) [1]

А вот так будешь логи писать:

var
 __OldAssertErrorProc: TAssertErrorProc;

procedure __AssertErrorProc(const Message, Filename: string; LineNumber: Integer; ErrorAddr: Pointer);
begin
 Log('ASSERTION: ' + Message + '. File name: ' + FileName + '. Line number: ' + IntToStr(LineNumber) + '. At address: ' + IntToHex(cardinal(ErrorAddr), 8) + '.');
 Abort;
end;

initialization
 __OldAssertErrorProc := AssertErrorProc;
 AssertErrorProc := __AssertErrorProc;

finalization
 AssertErrorProc := __OldAssertErrorProc;

end.


Германн   (2007-02-02 02:00:00) [2]


> Lera   (01.02.07 11:32)
>
> Уважаемые профи, подскажите можно ли, находясь в какой-либо
> процедуре во время работы приложения, выудить имя процедуры
> каким-нибудь оператором, для того чтобы не прописывать имя
> каждой процедуры вручную. Имя необходимо для записи в файл
> в случае ошибки в данной процедуре.
>

Не сочтите сей пост за рекламу, но предложу автору найти возможность изыскать не очень большие деньги и купить EurekaLog. Очень проработанная и полезная штучка!


Olivetti   (2007-02-02 01:57:00) [3]

в хелпе написано, что assert "Tests whether a Boolean expression is true". Причем здесь имя прцедуры ума не приложу!!??

Не к тому месту прикладываешь.
Кинь на форму кнопку, двойной клик по ней, и в обработчике напиши:

ASSERT(FALSE, 'Ошибка, однако');

Откомпилируй и запусти на выполнение.
Нажми на кнопку, и посмотри, какое сообщениевыдается.

А уж потом прикладывай этот, как ты его назвала... а, ум.


Dmitrij_K   (2007-02-02 01:11:00) [4]

http://www.madshi.net/madExceptDescription.htmвсе покажет.
http://www.madshi.net/flashIntroduction.htm- demo


Anatoly Podgoretsky   (2007-02-01 19:27:00) [5]

> Lera  (01.02.2007 12:12:06)  [6]

А зачем, если

The message is displayed along with the complete path, filename, and the line numberon which Assert failed.

Что гораздо точнее, чем имя процедуры, неизвестно где.


Vlad Oshin   (2007-02-01 14:43:00) [6]

да, надо идти другим путем

в принципе, можно получить состояние регистра EIP, разного для каждого места в программе :)
procedure TForm1.Button1Click(Sender: TObject);
label m1;
var
s:string;
a: longint;
begin
asm
call m1;
m1:
pop a
end;
s:=inttostr(a);
Showmessage(s);
end;

но проще написать по-честному Showmessage('процедура такая- ошибка така');
:)


Сергей М.   (2007-02-01 12:46:00) [7]

Тогда тебе придется изменить саму концепцию регистрации и обработки твоих ошибок, перебазировав ее на исключения.


Lera   (2007-02-01 12:33:00) [8]

потому что есть схожие диагностики, а в какой процедуре неизвестно


Сергей М.   (2007-02-01 12:27:00) [9]


> ошибкой считается моя собственная диагностика


Чудесно. А зачем тогда тебе имя процедуры ? Пиши в файл сразу результаты этой диагностики.


Ega23   (2007-02-01 12:25:00) [10]


> ошибкой считается моя собственная диагностика и выход из
> процедуры по моему велению


try
.....
except on E:Exception do
begin
  LogTo(.....);
  raise Exception.Create(E.Message);
end;
end;


Lera   (2007-02-01 12:21:00) [11]

ошибкой считается моя собственная диагностика и выход из процедуры по моему велению


Сергей М.   (2007-02-01 12:17:00) [12]


> в случае ошибки в данной процедуре


Что считается "ошибкой" ?


Плохиш   (2007-02-01 12:16:00) [13]


> Lera   (01.02.07 12:12) [6]

Во время выполнения программы у процедур/функций и переменных нет никаких имён.


Lera   (2007-02-01 12:12:00) [14]

в хелпе написано, что assert "Tests whether a Boolean expression is true". Причем здесь имя прцедуры ума не приложу!!??


Olivetti   (2007-02-01 12:06:00) [15]

ASSERT()


Lera   (2007-02-01 12:03:00) [16]

Ega23, каким всетаки оператором? Ответте, прошу вас.


Lera   (2007-02-01 11:51:00) [17]

Скажите пожалуйста каким оператором это можно?


Lera   (2007-02-01 11:37:00) [18]

а как?


Ega23   (2007-02-01 11:33:00) [19]

Если это published-метод - легко.
В общем случае, AFAIK, нельзя.


Наверх

Титульная страница Поиск, карта сайта Написать письмо