I've extracted some code from Claudio debugger and it works super! This code generates only PRIVATE, I'll modify it later for optionally show LOCAL and GLOBAL
Code: Select all
#include "hbmemvar.ch"
function ShowVariables
local aBVars := {}
local cName := ""
local i
local hSkip
local m
local nCount
local xValue
local cLog := ""
i := 2
while ( !Empty(ProcName(i)) )
aBVars := {}
nCount := __mvDbgInfo( HB_MV_PRIVATE )
IF nCount > 0
m := __mvDbgInfo( HB_MV_PRIVATE_LOCAL, i )
hSkip := { => }
hb_HAllocate( hSkip, nCount )
FOR n := nCount TO 1 STEP -1
xValue := __mvDbgInfo( HB_MV_PRIVATE, n, @cName )
IF ! cName $ hSkip
AAdd( aBVars, { cName, xValue, Iif( m > 0, "Private LOCAL", "Private GLOBAL" ), Iif( m > 0, i, 0 ) } )
hSkip[ cName ] := NIL
ENDIF
--m
NEXT
ENDIF
cLog += ProcName(i)+CRLF
for m := 1 to len(aBVars)
cLog += chr(9)+hb_valtoexp(aBVars[m])+CRLF
next m
i++
end
return cLog