see changelog for changes

This commit is contained in:
Antonio Linares
2002-07-14 10:35:23 +00:00
parent 7798e40aa9
commit a52cbbf5eb

View File

@@ -214,6 +214,7 @@ CLASS TDebugger
DATA cSearchString, cPathForFiles, cSettingsFileName
DATA nTabWidth, nSpeed
DATA lShowPublics, lShowPrivates, lShowStatics, lShowLocals, lAll
DATA lShowCallStack
DATA nTraceLevel
METHOD New()
@@ -221,7 +222,7 @@ CLASS TDebugger
METHOD All()
METHOD Animate() INLINE ::lAnimate := .t., ::Step()
METHOD Animate() INLINE If( ::lAnimate, ::Step(), nil )
METHOD BarDisplay()
METHOD BuildCommandWindow()
@@ -241,6 +242,7 @@ CLASS TDebugger
METHOD GoToLine( nLine )
METHOD HandleEvent()
METHOD Hide()
METHOD HideCallStack()
METHOD HideVars()
METHOD InputBox( cMsg, uValue, bValid, lEditable )
METHOD Inspect( uValue, cValueName )
@@ -273,19 +275,17 @@ CLASS TDebugger
METHOD ShowHelp( nTopic )
METHOD ShowVars()
/* METHOD Sort() INLINE ASort( ::aVars,,, {|x,y| x[1] < y[1] } ),;
METHOD Sort() INLINE ASort( ::aVars,,, { | x, y | x[ 1 ] < y[ 1 ] } ),;
::lSortVars := .t.,;
iif( ::oBrwVars != nil, ::oBrwVars:RefreshAll(), nil ),;
iif( ::oWndVars != nil .and. ::oWndVars:lVisible, ::oBrwVars:ForceStable(),)*/
METHOD Sort() INLINE ASort( ::aVars,,, {|x,y| x[1] < y[1] } ),;
::lSortVars := .t.,;
iif( ::oBrwVars != nil, ::oBrwVars:RefreshAll(), nil ),;
iif( ::oWndVars != nil .and. ::oWndVars:lVisible, iif(!::lGo,::oBrwVars:ForceStable(),),)
If( ::oBrwVars != nil, ::oBrwVars:RefreshAll(), nil ),;
If( ::oWndVars != nil .and. ::oWndVars:lVisible,;
If( ! ::lGo, ::oBrwVars:ForceStable(),),)
METHOD Speed() INLINE ;
::nSpeed := ::InputBox( "Step delay (in tenths of a second)",;
::nSpeed )
METHOD Stack()
METHOD Static()
METHOD Step() INLINE ::RestoreAppStatus(), ::Exit()
@@ -304,8 +304,10 @@ CLASS TDebugger
METHOD Locate()
METHOD FindNext()
METHOD FindPrevious()
METHOD RemoveWindow()
METHOD SearchLine()
METHOD ToggleCaseSensitive() INLINE ::lCaseSensitive := !::lCaseSensitive
METHOD ToggleAnimate() INLINE ::lAnimate := ! ::lAnimate
METHOD ToggleCaseSensitive() INLINE ::lCaseSensitive := ! ::lCaseSensitive
METHOD ShowWorkAreas() INLINE __dbgShowWorkAreas( Self )
ENDCLASS
@@ -331,6 +333,7 @@ METHOD New() CLASS TDebugger
::cPathForFiles := ""
::nTabWidth := 4
::nSpeed := 0
::lShowCallStack := .f.
::lShowPublics := .f.
::lShowPrivates := .f.
::lShowStatics := .f.
@@ -367,9 +370,11 @@ return Self
METHOD Activate( cModuleName ) CLASS TDebugger
::Show(.t.)
::Show()
::ShowCode( cModuleName )
::ShowCallStack()
if ::lShowCallStack
::ShowCallStack()
endif
::ShowVars()
::RestoreAppStatus()
@@ -446,9 +451,14 @@ METHOD CodeWindowProcessKey( nKey ) CLASS TDebugger
do case
case nKey == K_HOME
::oBrwText:GoTop()
SetCursor( SC_SPECIAL1 )
case nKey == K_END
::oBrwText:GoBottom()
::oBrwText:nCol = ::oWndCode:nLeft + 1
::oBrwText:nFirstCol = ::oWndCode:nLeft + 1
SetPos( Row(), ::oWndCode:nLeft + 1 )
SetCursor( SC_SPECIAL1 )
case nKey == K_LEFT
::oBrwText:Left()
@@ -570,6 +580,13 @@ METHOD CommandWindowProcessKey( nKey ) CLASS TDebugger
SubStr( LTrim( cCommand ), 1, 2 ) == "? "
lDisplay := !Empty( cResult := DoCommand( Self,cCommand ) )
case Upper( SubStr( LTrim( cCommand ), 1, 4 ) ) == "ANIM" .or. ;
Upper( SubStr( LTrim( cCommand ), 1, 7 ) ) == "ANIMATE"
::lAnimate = .t.
::Animate()
SetCursor( SC_NORMAL )
lDisplay = .f.
case Upper( SubStr( LTrim( cCommand ), 1, 3 ) ) == "DOS"
::OsShell()
SetCursor( SC_NORMAL )
@@ -793,8 +810,7 @@ METHOD HandleEvent() CLASS TDebugger
case ::oPullDown:IsOpen()
::oPullDown:ProcessKey( nKey )
if ::oPullDown:nOpenPopup == 0 // Closed
::aWindows[ ::nCurrentWindow ]:SetFocus( .t. )
SetCursor( nCursor )
Eval( ::aWindows[ ::nCurrentWindow ]:bGotFocus )
endif
case nKey == K_LDBLCLK
@@ -821,7 +837,12 @@ METHOD HandleEvent() CLASS TDebugger
case nKey == K_LBUTTONDOWN
if MRow() == 0
if ( nPopup := ::oPullDown:GetItemOrdByCoors( 0, MCol() ) ) != 0
SetCursor( SC_NONE )
if ! ::oPullDown:IsOpen()
if ::oWndCode:lFocused
Eval( ::oWndCode:bLostFocus )
endif
SetCursor( SC_NONE )
endif
::oPullDown:ShowPopup( nPopup )
endif
@@ -1012,14 +1033,39 @@ METHOD ShowCallStack() CLASS TDebugger
local n := 1
local oCol
::lShowCallStack = .t.
if ::oWndStack == nil
SetCursor( SC_NONE )
// Resize code window
DispBegin()
::oWndCode:Hide()
::oWndCode:nRight -= 16
::oBrwText:Resize(,,, ::oBrwText:nRight - 16)
::oWndCode:SetFocus( .t. )
::oWndCode:Show( .f. )
::oBrwText:Resize(,,, ::oBrwText:nRight - 16 )
::oBrwText:GotoLine( ::oBrwText:nActiveLine )
Eval( ::oWndCode:bLostFocus )
// Resize vars window
if ::oWndVars != nil
::oWndVars:Hide()
::oWndVars:nRight -= 16
::oWndVars:Show( .f. )
endif
DispEnd()
if ::aWindows[ ::nCurrentWindow ]:lFocused
::aWindows[ ::nCurrentWindow ]:SetFocus( .f. )
endif
::oWndStack := TDbWindow():New( 1, MaxCol() - 15, MaxRow() - 6, MaxCol(),;
"Calls" )
AAdd( ::aWindows, ::oWndStack )
::oBrwStack := TBrowseNew( 2, MaxCol() - 14, MaxRow() - 7, MaxCol() - 1 )//2
::nCurrentWindow = Len( ::aWindows )
::oBrwStack := TBrowseNew( 2, MaxCol() - 14, MaxRow() - 7, MaxCol() - 1 )
::oBrwStack:ColorSpec := ::aColors[ 3 ] + "," + ::aColors[ 4 ] + "," + ::aColors[ 5 ]
::oBrwStack:GoTopBlock := { || n := 1 }
::oBrwStack:GoBottomBlock := { || n := Len( ::aCallStack ) }
@@ -1029,8 +1075,6 @@ METHOD ShowCallStack() CLASS TDebugger
::oBrwStack:Cargo := 1 // Actual highligthed row
::oBrwStack:autolite := .F.
::oBrwStack:colPos:=1
::oBrwStack:freeze:=1
::oBrwStack:AddColumn( oCol:=TBColumnNew( "", { || PadC( ::aCallStack[ n ][ 1 ], 14 ) } ) )
ocol:ColorBlock := { || { iif( n == ::oBrwStack:Cargo, 2, 1 ), 3 } }
@@ -1039,8 +1083,9 @@ METHOD ShowCallStack() CLASS TDebugger
::oWndStack:bPainted := { || ::oBrwStack:ColorSpec := __DbgColors()[ 2 ] + "," + ;
__DbgColors()[ 5 ] + "," + __DbgColors()[ 4 ],;
::oBrwStack:RefreshAll(), ::oBrwStack:ForceStable() }
::oBrwStack:ForceStable()
::oWndStack:Show( .f. )
::oWndStack:bGotFocus = { || SetCursor( SC_NONE ) }
::oWndStack:Show( .t. )
endif
return nil
@@ -1067,20 +1112,38 @@ METHOD LoadSettings() CLASS TDebugger
endif
nColor++
end
case Upper( SubStr( cLine, 1, 11 ) ) == "OPTIONS TAB"
cLine := SubStr( cLine, 12, 3)
::nTabWidth := val(cLine)
cLine = SubStr( cLine, 12, 3 )
::nTabWidth = Val( cLine )
case Upper( SubStr( cLine, 1, 12 ) ) == "OPTIONS PATH"
cLine := SubStr( cLine, 13, 120)
::cPathForFiles := alltrim( cLine )
cLine = SubStr( cLine, 13, 120 )
::cPathForFiles = AllTrim( cLine )
case Upper( SubStr( cLine, 1, 14 ) ) == "MONITOR STATIC"
::lShowStatics := .t.
::lShowStatics = .t.
case Upper( SubStr( cLine, 1, 14 ) ) == "MONITOR PUBLIC"
::lShowPublics := .t.
::lShowPublics = .t.
case Upper( SubStr( cLine, 1, 13 ) ) == "MONITOR LOCAL"
::lShowLocals := .t.
::lShowLocals = .t.
case Upper( SubStr( cLine, 1, 15 ) ) == "MONITOR PRIVATE"
::lShowPrivates := .t.
::lShowPrivates = .t.
case Upper( SubStr( cLine, 1, 12 ) ) == "MONITOR SORT"
::lSortVars = .t.
case Upper( SubStr( cLine, 1, 14 ) ) == "VIEW CALLSTACK"
::lShowCallStack = .t.
case Upper( SubStr( cLine, 1, 2 ) ) == "BP"
AAdd( ::aBreakPoints,;
{ Val( SubStr( cLine, 4, RAt( " ", cLine ) - 4 ) ),;
SubStr( cLine, RAt( " ", cLine ) ) } )
endcase
next
@@ -1092,7 +1155,6 @@ METHOD LoadVars() CLASS TDebugger // updates monitored variables
local cStaticName, nStaticIndex, nStaticsBase
::aVars := {}
// asize( ::aVars,0 )
if ::lShowPublics
nCount := __mvDbgInfo( HB_MV_PUBLIC )
@@ -1155,6 +1217,11 @@ METHOD ShowVars() CLASS TDebugger
return nil
endif
if ! ( ::lShowLocals .or. ::lShowStatics .or. ::lShowPrivates .or. ;
::lShowPublics )
return nil
endif
if ::oWndVars == nil
::oWndVars := TDbWindow():New( 1, 0, Min( 7, Len( ::aVars ) + 2 ),;
@@ -1289,26 +1356,28 @@ METHOD ShowCode( cModuleName ) CLASS TDebugger
ASize( ::aCallStack, Len( ::aCallStack ) + 1 )
AIns( ::aCallStack, 1 )
::aCallStack[ 1 ] := { cFunction, {} } // function name and locals array
if !::lGo
if ::oWndStack != nil
::oBrwStack:RefreshAll()
endif
if cPrgName != ::cPrgName
if ! File( cPrgName ) .and. ! Empty( ::cPathForFiles )
if File( ::cPathForFiles + cPrgName )
cPrgName = ::cPathForFiles + cPrgName
endif
if !::lGo
if ::oWndStack != nil
::oBrwStack:RefreshAll()
endif
::cPrgName := cPrgName
::oBrwText := TBrwText():New( ::oWndCode:nTop + 1, ::oWndCode:nLeft + 1,;
::oWndCode:nBottom - 1, ::oWndCode:nRight - 1, ::cPrgName,;
__DbgColors()[ 2 ] + "," + __DbgColors()[ 5 ] + "," + ;
__DbgColors()[ 3 ] + "," + __DbgColors()[ 6 ] )
::oWndCode:SetCaption( ::cPrgName )
if cPrgName != ::cPrgName
if ! File( cPrgName ) .and. ! Empty( ::cPathForFiles )
if File( ::cPathForFiles + cPrgName )
cPrgName = ::cPathForFiles + cPrgName
endif
endif
::cPrgName := cPrgName
::oBrwText := TBrwText():New( ::oWndCode:nTop + 1, ::oWndCode:nLeft + 1,;
::oWndCode:nBottom - 1, ::oWndCode:nRight - 1, ::cPrgName,;
__DbgColors()[ 2 ] + "," + __DbgColors()[ 5 ] + "," + ;
__DbgColors()[ 3 ] + "," + __DbgColors()[ 6 ] )
::oWndCode:SetCaption( ::cPrgName )
endif
endif
endif
return nil
METHOD Open() CLASS TDebugger
@@ -1341,7 +1410,6 @@ METHOD OSShell() CLASS TDebugger
RUN ( cShell )
else
Alert( "Not implemented yet!" )
endif
recover using oE
@@ -1357,6 +1425,31 @@ METHOD OSShell() CLASS TDebugger
return nil
METHOD HideCallStack() CLASS TDebugger
::lShowCallStack = .f.
if ::oWndStack != nil
DispBegin()
::oWndStack:Hide()
::RemoveWindow( ::oWndStack )
::oWndStack = nil
::oWndCode:Hide()
::oWndCode:nRight += 16
::oWndCode:Show( .t. )
::oBrwText:Resize( ,,, ::oBrwText:nRight + 16 )
::oBrwText:GotoLine( ::oBrwText:nActiveLine )
if ::oWndVars != nil
::oWndVars:Hide()
::oWndVars:nRight += 16
::oWndVars:Show( .f. )
endif
DispEnd()
::nCurrentWindow = 1
endif
return nil
METHOD HideVars() CLASS TDebugger
::oWndVars:Hide()
@@ -1459,16 +1552,25 @@ return AScan( ::aBreakPoints, { | aBreak | aBreak[ 1 ] == nLine } ) != 0
METHOD GotoLine( nLine ) CLASS TDebugger
local nRow, nCol
if ::oBrwVars != nil
::ShowVars()
endif
::oBrwText:GotoLine( nLine )
nRow = Row()
nCol = Col()
if ::oBrwStack != nil .and. ! ::oBrwStack:Stable
::oBrwStack:ForceStable()
endif
if SetCursor() != SC_SPECIAL1
SetPos( nRow, nCol )
SetCursor( SC_SPECIAL1 )
endif
return nil
METHOD Local() CLASS TDebugger
@@ -1545,9 +1647,8 @@ METHOD SaveAppStatus() CLASS TDebugger
::nAppRow := Row()
::nAppCol := Col()
::cAppColors := SetColor()
::nAppCursor := SetCursor()
::nAppCursor := SetCursor( SC_NONE )
RestScreen( 0, 0, MaxRow(), MaxCol(), ::cImage )
// SetCursor( SC_NONE )
DispEnd()
return nil
@@ -1610,11 +1711,36 @@ METHOD SaveSettings() CLASS TDebugger
cInfo += "Monitor Private" + HB_OsNewLine()
endif
if ::lSortVars
cInfo += "Monitor Sort" + HB_OsNewLine()
endif
if ::lShowCallStack
cInfo += "View CallStack" + HB_OsNewLine()
endif
if ! Empty( ::aBreakPoints )
for n := 1 to Len( ::aBreakPoints )
cInfo += "BP " + AllTrim( Str( ::aBreakPoints[ n ][ 1 ] ) ) + " " + ;
AllTrim( ::aBreakPoints[ n ][ 2 ] )
next
endif
MemoWrit( ::cSettingsFileName, cInfo )
endif
return nil
METHOD Stack() CLASS TDebugger
if ::lShowCallStack := ! ::lShowCallStack
::ShowCallStack()
else
::HideCallStack()
endif
return nil
METHOD Static() CLASS TDebugger
::lShowStatics := ! ::lShowStatics
@@ -1858,6 +1984,19 @@ METHOD FindPrevious() CLASS TDebugger
return lFound
METHOD RemoveWindow( oWnd ) CLASS TDebugger
local n := AScan( ::aWindows, { | o | o == oWnd } )
if n != 0
::aWindows = ADel ( ::aWindows, n )
::aWindows = ASize( ::aWindows, Len( ::aWindows ) - 1 )
endif
::nCurrentWindow = 1
return nil
METHOD SearchLine() CLASS TDebugger
local cLine
@@ -1939,7 +2078,7 @@ static function DoCommand( o,cCommand )
cResult := ""
recover using oE
cResult = "Command error: " + oE:description
end sequence
end sequence
elseif SubStr( LTrim( cCommand ), 1, 2 ) == "? "
@@ -1967,4 +2106,4 @@ static function DoCommand( o,cCommand )
endif
next
Return cResult
Return cResult