Главная страница
    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.48 MB
Время: 0.04 c
1-1096898854
redlord
2004-10-04 18:07
2004.10.17
запись в начало файла


1-1096902246
DIS
2004-10-04 19:04
2004.10.17
Замена знака пробела на любой символ


8-1090576151
Руслан
2004-07-23 13:49
2004.10.17
Нет ли у кого-нибудь алгоритма IMA (DVI) ADPCM 2-bit?


3-1095335493
analyser
2004-09-16 15:51
2004.10.17
Наследуемые формы и ADOCommand на форме-предке


1-1096464141
Gemini
2004-09-29 17:22
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский