Hallo Daniel,
eine pute Delphi-Lösung ist mir leider nicht bekannt. Ohne Debug-Informationen kenne ich ebenfalls nur
TObject.MethodName. Unter Zuhilfenahme von
ASM fällt mir dann diese Möglichkeit ein:
- Ermitteln der Rücksprungadresse
- Lesen des Opcodes vor dieser Rücksprungadresse
- Interpretation (des Calls), um Zieladresse zu ermitteln
Sie hat leider die Nachteile, dass Methoden (theoretisch) auch "untypisch" aufgerufen werden können (Kaskadieren über Jumps, Verbiegen der Rücksprungadresse,...) und Du nicht zu jedem Zeitpunkt innerhalb der Routine davon ausgehen kannst, dass alle Register korrekt gesetzt sind.
Eine Andere (BruteForce-)Variante währe vielleicht mithilfe des Wissens um die Klasse, und der aktuellen Adresse im Code (EIP) zu probieren, welches die dichteste Methoden-Adresse vor dem testenden Stück Code ist.
Weil aber die Methoden-Adressen der
RTTI nur im published-Scope abgelegt werden, könntest Du bei dieser Methode aber einige Methoden "übersehen", während es bei der vorherigen Version nur einen Leer-String zur Folge hättest (Falsche Information vs. Keine Information).
Als Gängige Methode kenne ich nur den Einsatz eines Präprozessors in mehr oder weniger gut integrierten Umgebungen. Falls Du mit ModelMaker arbeiten solltest, könntest Du den Code mit
Instrumentation Code mithilfe der beiden Makros "MethodEnterInstrumentation" und "MethodExitInstrumentation" hinbekommen, ohne dass Du speziellen Code einfügen brauchst. Die anderen Präprozessoren, die mir für Delphi bekannt sind, müssen jeweils als "externe Tools" gestartet werden.