Procedurepointer ermitteln mit #PB_Compiler_Procedure

Für allgemeine Fragen zur Programmierung mit PureBasic.
SMaag
Beiträge: 184
Registriert: 08.05.2022 12:58

Procedurepointer ermitteln mit #PB_Compiler_Procedure

Beitrag von SMaag »

kann man mit der Compiler Konstante #PB_Compiler_Procedure
die Adresse einer Procedure ermitteln.
@ #PB_Compiler_Procedure bringt leider einen Fehler

Code: Alles auswählen

Procedure Test()
  Debug "Name :" +  #PB_Compiler_Procedure
  Debug "Pointer : " + @Test()
  ; Debug @#PB_Compiler_Procedure ; geht das irgendwie mit der Konstante?
EndProcedure

Test()
Debug OutPut
Name :Test
Pointer : 1703780
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Procedurepointer ermitteln mit #PB_Compiler_Procedure

Beitrag von STARGÅTE »

Die Adresse einer Prozedure erhältst du mit dem @ for dem Prozedurenamen, wie du es ja selber machst.
Was genau erwartest du denn von @#PB_Compiler_Procedure ?
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Procedurepointer ermitteln mit #PB_Compiler_Procedure

Beitrag von mk-soft »

Runtime library. Siehe PB-Hilfe
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
SMaag
Beiträge: 184
Registriert: 08.05.2022 12:58

Re: Procedurepointer ermitteln mit #PB_Compiler_Procedure

Beitrag von SMaag »

Was genau erwartest du denn von @#PB_Compiler_Procedure ?
Ich wollte die letzen sagen wir mal 100.1000 ProcedureCalls loggen und das möglichst einfach!
Folgendes ist mir dan so eingefallen!
Damit wäre das einfach ein Macro-Aufruf am Anfang jeder Procedure gewesen und immer identisch!
Mit #cfg_ListCallsOn ist das dann über den Compiler schaltbar!

Code: Alles auswählen

#cfg_ListCallsOn = #True

Procedure ListProcedureCalls(ModuleName.s, ProcName.s, ptrProc.i)
  ; CODE
EndProcedure

Macro mac_ListCalls()
  CompilerIf #cfg_ListCallsOn
      ListProcedureCalls(#PB_Compiler_Module, #PB_Compiler_Procedure, @#PB_Compiler_Procedure())
  CompilerEndIf
EndMacro

Procedure TestProcLog()
  
  mac_ListCalls()
  
  
EndProcedure


Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Procedurepointer ermitteln mit #PB_Compiler_Procedure

Beitrag von STARGÅTE »

Hm, dafür gibt es das Debugger-Tool: Aufrufverfolgung -> Statistiken
Das kannst du im Programm aufrufen mit ShowCallstack() und siehst genau wie oft jede Prozedur aufgerufen wurde:

Code: Alles auswählen

Procedure Test1()
EndProcedure

Procedure Test2()
EndProcedure

Define J, I

ShowCallstack()

For J = 1 To 100
	Test1()
	For I = 1 To 10
		Test2()
	Next
Next

CallDebugger
Name Aufrufzähler
Test1() 100
Test2() 1000
Außerdem gibt es da auch die Programmanalyse, wenn du es sogar Zeilenweise haben möchtest.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
SMaag
Beiträge: 184
Registriert: 08.05.2022 12:58

Re: Procedurepointer ermitteln mit #PB_Compiler_Procedure

Beitrag von SMaag »

Hm, dafür gibt es das Debugger-Tool: Aufrufverfolgung -> Statistiken
Danke, das kannte ich noch nicht!
Damit dürfte sich das erledigt haben!
Antworten