Звідки викликається процедура

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

> назва процедури або функції в тілі якої знаходиться виклик до "МОЇ" процедури?

Якщо немає на вході жодних параметрів, і немає локальних змінних тоді так:

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

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

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

Якщо є локальні змінні тоді так:

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]));

там тип передачі параметрів

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

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

вік живи вік учись.

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

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

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

Не в хелпі, в інеті треба ритися ;)

Завантажити - скачав вже, а ось як нею скористатися. я то зрозумів що в юсесі потрібно вказати вищенаведений юніт але що далі? Заздалегідь дякую!

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

1) Скомпілюй MakeJclDbg з

2) компілюєш свій код ось так:

%DCCPATH%dcc32 -UJcl -IJCL -$R+ -$C- -$J+ -GD -B -Q myproject.dpr якщо немає myproject.map goto cleanup rem attach MAP-файл до executable to trace error /exception stack Jcl\MakeJclDbg.exe -E myproject.map del myproject.map :cleanup

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

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