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

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

Можно ли узнать имя процедуры. [D6, WinXP]


beglec ©   (2005-10-23 10:54:00) 

Вопрос: Можно ли узнать в процедуре имя процедуры которая ее вызвала.
Например:

Procedure Bebe;
begin
...
// узнать какая процедура вызвала процедуру/функцию  bebe
end;

procedure gogogo;
begin
  bebe;
end;


Erik1   (2005-10-24 12:30:00) [1]

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


beglec   (2005-10-23 16:41:00) [2]

->nt - А также пиратством, троянскими конями, спамерством хакерством и фрикерством :)

Нет. Просто делаю обработку логических ошибок.
Типа
Login not found и так далее
а процедур по обработке данных с логинами очень много. Соответственно и много может быть логических ошибок. Делаю теперь везде логи почти на каждую операцию. То что работает уже без сбоев там убираю "логирование"
Просмотря весь код есть одинаковые места с чуть чуть разнвыми вызовами.
В данный момент  я просто делаю

AddLog(log,Name Procedure);

Name procedure - название откуда было вызвано. Нужно это чтобы легче было искать логические ошибки. Сами понимаете, что это за ошибки.
Delphi их обнаружить не может.

Поэтому задумался и задался вопросом, а может ли например процедура AddLog распозновать откуда ее вызвали, по мимо того что явно ей указывать.

Логов в программе много пишу, и зачастую переношу простым копированием строки CTRL+C. Частенько забываю исправлять из какой процедуры вызываю. И в случае ошибки в забытом месте, начинается путаница.

Вот и вся проблема.


nt   (2005-10-23 15:41:00) [3]

> Вопрос: Можно ли узнать в процедуре имя процедуры которая
> ее вызвала.

попахивает нарушением локальности...


Джо   (2005-10-23 14:52:00) [4]

В принципе, я думаю, можно узнать и имя. Для этого придется генерировать для программы detailed map-file (Project/Options/Linker...). Таким образом поступает, например, Jedi'ский обработчик исключений.


beglec   (2005-10-23 13:25:00) [5]

Спасибо. Нужен был ответ только да или нет.
если да, то как.

-> OldNaum а если процедуру вызвают из 10000 разных мест ? Да еще из разных программ.

Это выход, согласен, но не рациональный, по крайней мере я так думаю.


OldNaum   (2005-10-23 11:55:00) [6]

используй какие-нить флаги, кто тебе мешает?

procedure bebe(who_run_me: integer);
begin
case who_run_me of
 0: showmessage('gogogo');
 1: showmessage('testtest');
 else showmessage('someoneelse');
...
end;

procedure gogogo;
begin
bebe(0);
end;


Sergey Masloff   (2005-10-23 11:26:00) [7]

имя нет.


Наверх

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