Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.17;
Скачать: CL | DM;

Вниз

Откуда вызывается процедура?   Найти похожие ветки 

 
Black-Grin ©   (2004-09-28 01:12) [0]

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


 
Defunct ©   (2004-09-28 03:38) [1]

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

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

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

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

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

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


 
Defunct ©   (2004-09-28 03:48) [2]

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

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;


 
atruhin ©   (2004-09-28 08:18) [3]

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


 
Defunct ©   (2004-09-28 09:22) [4]

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

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


 
KSergey ©   (2004-09-28 09:39) [5]


>  Black-Grin ©   (28.09.04 01:12)

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

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


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


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

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


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

> Alt+Ctrl+S

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


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

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


 
Black-Grin ©   (2004-09-28 11:05) [9]

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


 
KSergey ©   (2004-09-28 11:08) [10]

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


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

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


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

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

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

удачи


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

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

  -GD



Страницы: 1 вся ветка

Текущий архив: 2004.10.17;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.032 c
14-1096294278
GrayFace
2004-09-27 18:11
2004.10.17
Не сохраняется настройка биоса


14-1096005299
MBo
2004-09-24 09:54
2004.10.17
Пятничные задачки. И простые и сложные...


1-1096512067
Kost
2004-09-30 06:41
2004.10.17
Как изменить приоритет основного потока


1-1096975263
antonn
2004-10-05 15:21
2004.10.17
Drag&Drop


1-1096976842
СержК
2004-10-05 15:47
2004.10.17
Ошибка при установке компонент