Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.049 c
1-1096889846
DelphiLexx
2004-10-04 15:37
2004.10.17
Для чего и как пользоваться оператором Inline


1-1096472345
vigo
2004-09-29 19:39
2004.10.17
OnKeyPress


14-1096017589
Prohodil Mimo
2004-09-24 13:19
2004.10.17
Я б в программеры пошёл, пусть меня научат!


3-1095518094
Knapp
2004-09-18 18:34
2004.10.17
"Query is too complex"


8-1090565181
Ricks
2004-07-23 10:46
2004.10.17
Медиа плеер





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский