Звідки викликається процедура
Вітаю, підкажіть, як можна отримати назву процедури або функції в тілі якої знаходиться виклик до "МОЇ" процедури? Тобі звідки виконується процедура? Ситуація просто така, що не можу виловити глюк хоч в лог файл писати дії клієнта. а розсовувати процедуру з різними параметрами типу 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]