Seite 1 von 1

Procedurepointer ermitteln mit #PB_Compiler_Procedure

Verfasst: 17.02.2023 21:31
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

Re: Procedurepointer ermitteln mit #PB_Compiler_Procedure

Verfasst: 17.02.2023 21:57
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 ?

Re: Procedurepointer ermitteln mit #PB_Compiler_Procedure

Verfasst: 17.02.2023 22:38
von mk-soft
Runtime library. Siehe PB-Hilfe

Re: Procedurepointer ermitteln mit #PB_Compiler_Procedure

Verfasst: 18.02.2023 10:59
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



Re: Procedurepointer ermitteln mit #PB_Compiler_Procedure

Verfasst: 18.02.2023 11:23
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.

Re: Procedurepointer ermitteln mit #PB_Compiler_Procedure

Verfasst: 20.02.2023 15:18
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!