Форум: "Основная";
Текущий архив: 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