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

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

Откуда вызывается процедура? [D7, Win2k, WinXP]


Black-Grin ©   (2004-09-28 01:12:00) 

Приветствую, подскажите, как можно получить название процедуры или функции в теле которой находится вызов к "МОЕЙ" процедуре? Тобишь откуда выполняется процедура?  Ситуация просто такая, что не могу выловить глюк хочю в лог файл писать действия клиента... а рассовывать процедуру с разными параметрави типа logevent('Пошёл тудато'); Неохота... проще просто logevent... или чтонить типа logevent(nameofprocedure)...  Заранее благодарен за дельные советы!


Ruslan Solovyev   (2004-09-28 15:09:00) [1]

из опций компиляции вверху важная только

  -GD


Ruslan Solovyev   (2004-09-28 15:07:00) [2]

1) Скомпилируй MakeJclDbg из

jcl\examples\debugextension\tools\

2) компилируешь свой код вот так:

%DCCPATH%dcc32 -UJcl -IJCL -$R+ -$C- -$J+ -GD -B -Q myproject.dpr
if not exist myproject.map goto cleanup
rem attach MAP file to executable to trace error/exception stack
Jcl\MakeJclDbg.exe -E myproject.map
del myproject.map
:cleanup

etc

извиняйте - нету времени - дальше сам разберешся :)

удачи


Black-Grin   (2004-09-28 11:33:00) [3]

Скачать - скачал уже, а вот как ею пользоваться... я то понял что в юсесе нужно указать вышеприведёный юнит но что дальше? Заранее спасибо!


KSergey   (2004-09-28 11:08:00) [4]

Не в хелпе, в инете надо рыться ;) Она бесплатная


Black-Grin   (2004-09-28 11:05:00) [5]

Да действительно, без делфей...  а вот по поводу JCL можно поподробнее? Я сейчас конечно попробую в хелпе порыться на эту тему но времени мало ;(


Ruslan Solovyev   (2004-09-28 10:57:00) [6]

Насколькоя понял - Black-Grin хочет получить информацию на клиенте програмно, т.е. без Delphi IDE.


Defunct   (2004-09-28 10:21:00) [7]

> Alt+Ctrl+S

век живи - век учись...


Ruslan Solovyev   (2004-09-28 10:01:00) [8]

Можно использовать JCL (JclDebug.pas): файл мэппинга сохраняется в ресурсах и библиотека может оттрасировать стек вызовов со ссылкой на номера строк и имен процедур


KSergey   (2004-09-28 09:39:00) [9]


>  Black-Grin ©   (28.09.04 01:12)

Jedi
Говорят там есть что-то, на основе отладочной информации

>  [1] Defunct ©   (28.09.04 03:38)
> Самый простой способ - поставить в вашей процедуре точку
> останова под отладкой, и потом пошагово выйти из процедуры,
> окажетесь там где надо.

Подчеркнутое - не нужно. Достаточно нажать Alt+Ctrl+S


Defunct   (2004-09-28 09:22:00) [10]

atruhin ©   (28.09.04 08:18) [3]
?

без разницы там тип передачи параметров


atruhin   (2004-09-28 08:18:00) [11]

Defunct ©   (28.09.04 03:48) [2]
Да? А про тип передачи параметров забыл?


Defunct   (2004-09-28 03:48:00) [12]

Если есть локальные переменные тогда так:

Procedure TForm1.MyProc;
Var  CallerAddress: Integer;
{ тут ваши переменные }
Begin

Asm
  Push EAx
  Mov  EAx, [EBp+4]
  Mov  CallerAddress,EAx
  Pop  EAx
End;
  ShowMessage(Format('caller address %X',[CallerAddress]));

  { здесь ваш код }
End;


Defunct   (2004-09-28 03:38:00) [13]

> название процедуры или функции в теле которой находится вызов к "МОЕЙ" процедуре?

Никак. Если вы сами туда явно не вставите имя, тогда никак. Можно только получить адрес. И то это довольно сложно сделать. Зависит от количества параметров и от количества локальных переменных в вашей процедуре.

Если нет на входе никаких параметров, и нет локальных переменных тогда так:

Function CalledFrom:Integer;assembler;
Asm
  Mov  EAx, [ESP]
End;

procedure TForm1.Button5Click(Sender: TObject);
begin
  ShowMessage(Format('called from %X',[CalledFrom]));
end;

> Тобишь откуда выполняется процедура?
Самый простой способ - поставить в вашей процедуре точку останова под отладкой, и потом пошагово выйти из процедуры, окажетесь там где надо.


Наверх

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