внутри процедуры/функции получить текстом имя, параметры + результат выполнения

MMM_Corp
Дата: 06.05.2011 01:33:49
function TTBrowserToDelphi.get_disk_info(var disk, opt: OleVariant): OleVariant;
var
  c:Char;
  j: System.Int64;
begin
  j:=0;
  c := string(disk)[1];
  case StrToInt(opt) of
  0: j := DiskFree(Ord(c) - 64);
  1: j := DiskSize(Ord(c) - 64);
  end;
  result:=j;
end;

подскажите как внутри этой функции получить имя процедуры/функции, а также ее параметров а также результат выполнения?
нужно банально логировать что вызывается с одного юнита, есть чтото в природе универсальное? копал с второну RTTI, но нужного не нашол, пните в нужном направлении или киньте код.

Спасибо!
Relic Hunter
Дата: 06.05.2011 01:55:18
MMM_Corp,

Delphi Help
Each entry in the Call Stack window displays the procedure name and the values of any parameters passed to it.
MMM_Corp
Дата: 06.05.2011 14:37:19
причем тут стек?
мне нужно в релизной программе писать в мемо процедуры какие выполняются с какими параметрами, это не для отладки а для программы!
FlyD
Дата: 06.05.2011 14:39:09
пинаю в направлении JEDI :)
Relic Hunter
Дата: 06.05.2011 19:26:35
>>причем тут стек?

Книжек почитай на досуге, писатель.

>>мне нужно в релизной программе писать в мемо процедуры какие выполняются с какими параметрами, это не для отладки а для программы!

Твоя т.н. прога и пытается делать отладку. И тебе сказали как это сделать.
AWSVladimir
Дата: 11.05.2011 12:26:10
MMM_Corp

Стандартное логирование спасет отца ....

Выше если надо в мемо

 LOG:=FrmMain.MemoLog.Lines;

function TTBrowserToDelphi.get_disk_info(var disk, opt: OleVariant): OleVariant;
var
  c:Char;
  j: System.Int64;
begin
 LOG.ADD('function TTBrowserToDelphi.get_disk_info(var disk, opt: OleVariant): OleVariant;');
 LOG.ADD('param1: '+disk+'  param2: '+opt);
  j:=0;
  c := string(disk)[1];
  case StrToInt(opt) of
  0: j := DiskFree(Ord(c) - 64);
  1: j := DiskSize(Ord(c) - 64);
  end;
  result:=j;
 LOG.ADD('result:  '+result);
end;

Со стеком ребята лукавят, т.к. имя достать можно, но значения параметров + получение результата довольно не простая задача, т.к. параметр м/б любой тип, в том числе pointer^.pointer^.Pointer^.Value866:TDateTime;
Результат так же может быть любой, в том числе объект, интерфейс, указатель на массив.

Так что забей на универсальность, т.к. получение данных из памяти процесса тех же рекордов будет отличаться от компилятора и настроек + packet record уже даст совсем другой расклад.
Забей, но если есть полгодика свободного времени - флаг в руки.
Может напишешь потом свой декомпилятор делфей, как один автор.
MMM_Corp
Дата: 24.05.2011 13:07:20
ну а если все параметры типа OleVariant ?
я пока понять не могу, как же всетаки написать правильно,
ну конечно вариант:
LOG.ADD('function TTBrowserToDelphi.get_disk_info(var disk, opt: OleVariant): OleVariant;');
уж совсем очевиден, но такое не устраивает)
Кроик Семён
Дата: 24.05.2011 13:16:31
MMM_Corp,

попадалось мне один раз "универсальное": Smart Inspect

эта штука вставляет в начало и конец каждой процедуры протоколирующие вставки
и гибко настраивается
Ega
Дата: 24.05.2011 13:18:59
MMM_Corp
мне нужно в релизной программе писать в мемо процедуры какие выполняются с какими параметрами, это не для отладки а для программы!


Нормальные вызовы с понятными значениями параметров - только ручками, ибо логику работы знаешь только ты. Универсальное - не есть самое лучшее (точнее - далеко не всегда).
Ну и такое желание для релизной программы - мягко говоря странновато.
Кроик Семён
Дата: 24.05.2011 13:21:59
P.S.
(по мотивам SmartInspect'a из моего последнего поста)

И кстати, думаю, ты бы и сам бы смог написать вот что:

программу,
которая парсит юнит (или даже целый проект)
и после begin'a каждой процедуры вставляет протоколирующую вставку в удобной тебе форме.