versiones tokyo software full descargar borland delphi delphi-7

tokyo - delphi versiones



¿Cómo obtener el nombre del método actual en Delphi 7? (2)

Vea también nuestra clase TSynMapFile .

Es capaz de cargar un archivo .map y comprimirlo en un formato binario optimizado. Será mucho más pequeño que el propio .map (por ejemplo, 900 KB .map -> 70 KB .mab ). Este .mab se puede incrustar fácilmente dentro del exe. Por lo tanto, es más pequeño que el formato utilizado por JCL o MadExcept, y también es más pequeño que la información incorporada en tiempo de compilación por Delphi.

Lo usarás como tal:

Map := TSynMapFile.Create; // or specify an exe name try i := Map.FindSymbol(SymbolAddr); if i>=0 then writeln(Map.Symbols[i].Name); // or for your point: writeln(Map.FindLocation(Addr)); // e.g. ''SynSelfTests.TestPeopleProc (784)'' finally Map.Free; end;

Por ejemplo, así es como se usa en nuestras clases de registro.

procedure TSynLog.Log(Level: TSynLogInfo); var aCaller: PtrUInt; begin if (self<>nil) and (Level in fFamily.fLevel) then begin LogHeaderLock(Level); asm mov eax,[ebp+4] // retrieve caller EIP from push ebp; mov ebp,esp sub eax,5 // ignore call TSynLog.Enter op codes mov aCaller,eax end; TSynMapFile.Log(fWriter,aCaller); // here it will call TSynMapFile for the current exe LogTrailerUnLock(Level); end; end;

Este método puede recuperar la dirección de la persona que llama y registrar su nombre de unidad, nombre del método y número de línea.

¿Hay alguna manera de saber el nombre de un método en el que me encuentro actualmente?

Así que eso:

procedure TMyObject.SomeMethod(); begin Writeln(''my name is: '' + <hocus pocus>); end;

produciría esta salida:

my name is: SomeMethod


JCL es gratis y tiene funciones para eso. Depende de qué tan bien se pueda hacer un seguimiento de pila y cuánta información de depuración esté presente.

JclDebug.pas

function FileByLevel(const Level: Integer = 0): string; function ModuleByLevel(const Level: Integer = 0): string; function ProcByLevel(const Level: Integer = 0): string; function LineByLevel(const Level: Integer = 0): Integer;