[Delphi] Pobranie nazwy procedury

0

Witam

Czy jest możliwe pobranie nazwy procedury/funkcji w jakimkolwiek momencie ?
Np.

procedure ProcB;
begin
//jak pobrać w tym miejscu nazwę procudury w której aktualnie jesteśmy lub nazwę procedury, która ją wywołała 
end;

procedure ProcA;
begin
  ProcB;
end;
0

Chyba musisz przechowywać nazwę w zmiennej, bo innego wyjścia nie widzę, ale jestem bardzo ciekaw...

0

Stuprocentowej pewności nie mam, ale nie sądzę, by było to możliwe - procedura po skompilowaniu to jest tylko miejsce w pamięci, do którego można skoczyć, nie istenieje coś takiego jak jej nazwa. Chyba, że kompilator ją gdzieś dodatkowo zapisuje, by można było się do niej dobrać, ale szczerze wątpię.

0
Adam.Pilorz napisał(a)

Stuprocentowej pewności nie mam, ale nie sądzę, by było to możliwe - procedura po skompilowaniu to jest tylko miejsce w pamięci, do którego można skoczyć, nie istenieje coś takiego jak jej nazwa. Chyba, że kompilator ją gdzieś dodatkowo zapisuje, by można było się do niej dobrać, ale szczerze wątpię.

Też myśle że nie, po prostu zapamiętywana jest jako adres. Chyba że jest to odwołanie do VCL wtedy jest to gdzieś zapisywane bo np. jeżeli to będzie:

procedure TForm1.Button1Click(Sender: TObject);

To po zdiasemblowaniu za pomocą DeDe dalej będzie widoczna nazwa procedury.
A tak w ogóle po co ci nazwy procedur?

0

możesz pobrać pointer do procedury, gdzieś go przesłać i próbować użyć, kiedyś coś podobnego robiłem wykorzystując DLLe, ale najprostsze pytanie - do czego ci to potrzebne, cześto się okazuje że problem wymagający "takiego podejscia" ma dużo prostsze rozwiązania

0
kAzek napisał(a)

A tak w ogóle po co ci nazwy procedur?

<ort>Naprzykład </ort>po to, aby zrobić raport błędów i jeśli wystąpi jakiś błąd pobrać nazwę procedury lub funkcji w której doszło do błędu

// taaaa... do namierzenia procedury wystarczy adres błędu i wersja programu - Ł

0

Procedury - nie wiem.

Do metody można użyć funkcji MethodName
class function MethodName(Address: Pointer): ShortString;

Z Address trzeba pokombinować.. może poszukać w tablicy VMT.. nie wiem

0

A nie prosciej zadeklarowac zmienna typu string "akcja" i na poczatku chociazby kazdej procedury przypisac zmiennej akcja nazwe procedury ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1