Initial work on varobjs. Tests locks up an image, should be polished and folded.
--- a/GDBMI_stack_info_frame.st Thu Mar 19 08:25:30 2015 +0000
+++ b/GDBMI_stack_info_frame.st Thu Mar 19 08:43:28 2015 +0000
@@ -1,5 +1,9 @@
+"{ Encoding: utf8 }"
+
"{ Package: 'jv:libgdbs' }"
+"{ NameSpace: Smalltalk }"
+
GDBMICommand subclass:#GDBMI_stack_info_frame
instanceVariableNames:''
classVariableNames:''
@@ -47,3 +51,13 @@
^ 'stack-info-frame'
! !
+!GDBMI_stack_info_frame methodsFor:'accessing-descriptors'!
+
+resultDescription
+ ^ (super resultDescription)
+ define:#frame as:GDBFrame;
+ yourself
+
+ "Created: / 19-03-2015 / 08:29:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- a/GDBMI_thread_info.st Thu Mar 19 08:25:30 2015 +0000
+++ b/GDBMI_thread_info.st Thu Mar 19 08:43:28 2015 +0000
@@ -117,8 +117,13 @@
of:GDBThreadInfo;
yourself
+ "
+ GDBMI_thread_info new resultDescription
+ "
+
"Created: / 17-09-2014 / 00:00:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 08-03-2015 / 08:20:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified (comment): / 18-03-2015 / 17:05:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!GDBMI_thread_info class methodsFor:'documentation'!
--- a/GDBMI_thread_list_ids.st Thu Mar 19 08:25:30 2015 +0000
+++ b/GDBMI_thread_list_ids.st Thu Mar 19 08:43:28 2015 +0000
@@ -1,5 +1,9 @@
+"{ Encoding: utf8 }"
+
"{ Package: 'jv:libgdbs' }"
+"{ NameSpace: Smalltalk }"
+
GDBMICommand subclass:#GDBMI_thread_list_ids
instanceVariableNames:''
classVariableNames:''
@@ -50,3 +54,19 @@
^ 'thread-list-ids'
! !
+!GDBMI_thread_list_ids methodsFor:'accessing-descriptors'!
+
+resultDescription
+ ^ (super resultDescription)
+ define:#'thread-ids' as:Array of:Integer;
+ define:#'current-thread-id' as: Integer;
+ define:#'number-of-threads' as: Integer;
+ yourself
+
+ "
+ GDBMI_thread_list_ids new resultDescription
+ "
+
+ "Created: / 19-03-2015 / 08:35:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- a/GDBVariable.st Thu Mar 19 08:25:30 2015 +0000
+++ b/GDBVariable.st Thu Mar 19 08:43:28 2015 +0000
@@ -1,9 +1,11 @@
+"{ Encoding: utf8 }"
+
"{ Package: 'jv:libgdbs' }"
"{ NameSpace: Smalltalk }"
GDBTransientObject subclass:#GDBVariable
- instanceVariableNames:'frame name value'
+ instanceVariableNames:'frame name value varobj'
classVariableNames:''
poolDictionaries:''
category:'GDB-Core'
@@ -27,9 +29,47 @@
!
value
- ^ value
+ ^ self varobj value
"Created: / 27-02-2015 / 23:37:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 18-03-2015 / 16:47:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!GDBVariable methodsFor:'accessing-private'!
+
+varobj
+ varobj isNil ifTrue:[
+ | result currentThreadId currentFrameId |
+
+ result := debugger send: (GDBMI_thread_list_ids new).
+ currentThreadId := result propertyAt: 'current-thread-id'.
+ result := debugger send: (GDBMI_stack_info_frame new).
+ currentFrameId := (result propertyAt: 'frame') level.
+
+ frame thread id ~= currentThreadId ifTrue:[
+ debugger send: (GDBMI_thread_select new arguments:(Array with:frame thread id)).
+ debugger send: (GDBMI_stack_select_frame new arguments:(Array with:frame level)).
+ ] ifFalse:[
+ frame level ~= currentFrameId ifTrue:[
+ debugger send: (GDBMI_stack_select_frame new arguments:(Array with:frame level)).
+ ].
+ ].
+
+ result := debugger send: (GDBMI_var_create new arguments: { '-' . '*' . name }).
+
+ frame thread id ~= currentThreadId ifTrue:[
+ debugger send: (GDBMI_thread_select new arguments:currentThreadId).
+ debugger send: (GDBMI_stack_select_frame new arguments:currentFrameId).
+ ] ifFalse:[
+ frame level ~= currentFrameId ifTrue:[
+ debugger send: (GDBMI_stack_select_frame new arguments:currentFrameId).
+ ].
+ ].
+ ].
+ ^ varobj value
+
+ "Created: / 27-02-2015 / 17:18:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 18-03-2015 / 16:52:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!GDBVariable methodsFor:'initialization'!
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/GDBVariableObject.st Thu Mar 19 08:43:28 2015 +0000
@@ -0,0 +1,39 @@
+"{ Package: 'jv:libgdbs' }"
+
+"{ NameSpace: Smalltalk }"
+
+GDBObject subclass:#GDBVariableObject
+ instanceVariableNames:'name value'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'GDB-Private-Model'
+!
+
+!GDBVariableObject methodsFor:'accessing'!
+
+name
+ ^ name
+!
+
+value
+ ^ value
+! !
+
+!GDBVariableObject methodsFor:'accessing - GDB value descriptors'!
+
+description
+ ^ (super description)
+ define:#name as:String;
+ define:#numchild as:Integer;
+ define:#value as:String;
+ define:#type as:String;
+ define:#'thread-id' as:Integer;
+ define:#has_more as:Boolean;
+ define:#dynamic as:Boolean;
+ define:#displayhint as:String;
+ yourself
+
+ "Created: / 16-09-2014 / 23:59:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 27-02-2015 / 17:10:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- a/Make.proto Thu Mar 19 08:25:30 2015 +0000
+++ b/Make.proto Thu Mar 19 08:43:28 2015 +0000
@@ -168,6 +168,7 @@
$(OUTDIR)GDBThreadStateStopped.$(O) GDBThreadStateStopped.$(H): GDBThreadStateStopped.st $(INCLUDE_TOP)/jv/libgdbs/GDBThreadState.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)GDBThreadStateTerminated.$(O) GDBThreadStateTerminated.$(H): GDBThreadStateTerminated.st $(INCLUDE_TOP)/jv/libgdbs/GDBThreadState.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)GDBUnixProcess.$(O) GDBUnixProcess.$(H): GDBUnixProcess.st $(INCLUDE_TOP)/jv/libgdbs/GDBProcess.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)GDBVariableObject.$(O) GDBVariableObject.$(H): GDBVariableObject.st $(INCLUDE_TOP)/jv/libgdbs/GDBObject.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)GDBBreakpoint.$(O) GDBBreakpoint.$(H): GDBBreakpoint.st $(INCLUDE_TOP)/jv/libgdbs/GDBDebuggerObject.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBObject.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)GDBConsoleOutputEvent.$(O) GDBConsoleOutputEvent.$(H): GDBConsoleOutputEvent.st $(INCLUDE_TOP)/jv/libgdbs/GDBEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBStreamOutputEvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)GDBEventSetEvent.$(O) GDBEventSetEvent.$(H): GDBEventSetEvent.st $(INCLUDE_TOP)/jv/libgdbs/GDBEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBInternalEvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
--- a/Make.spec Thu Mar 19 08:25:30 2015 +0000
+++ b/Make.spec Thu Mar 19 08:43:28 2015 +0000
@@ -90,6 +90,7 @@
GDBThreadStateStopped \
GDBThreadStateTerminated \
GDBUnixProcess \
+ GDBVariableObject \
GDBBreakpoint \
GDBConsoleOutputEvent \
GDBEventSetEvent \
@@ -276,6 +277,7 @@
$(OUTDIR_SLASH)GDBThreadStateStopped.$(O) \
$(OUTDIR_SLASH)GDBThreadStateTerminated.$(O) \
$(OUTDIR_SLASH)GDBUnixProcess.$(O) \
+ $(OUTDIR_SLASH)GDBVariableObject.$(O) \
$(OUTDIR_SLASH)GDBBreakpoint.$(O) \
$(OUTDIR_SLASH)GDBConsoleOutputEvent.$(O) \
$(OUTDIR_SLASH)GDBEventSetEvent.$(O) \
--- a/abbrev.stc Thu Mar 19 08:25:30 2015 +0000
+++ b/abbrev.stc Thu Mar 19 08:43:28 2015 +0000
@@ -41,6 +41,7 @@
GDBThreadStateStopped GDBThreadStateStopped jv:libgdbs 'GDB-Core' 1
GDBThreadStateTerminated GDBThreadStateTerminated jv:libgdbs 'GDB-Core' 1
GDBUnixProcess GDBUnixProcess jv:libgdbs 'GDB-Private' 0
+GDBVariableObject GDBVariableObject jv:libgdbs 'GDB-Private-Model' 0
GDBBreakpoint GDBBreakpoint jv:libgdbs 'GDB-Core' 0
GDBConsoleOutputEvent GDBConsoleOutputEvent jv:libgdbs 'GDB-Core-Events' 0
GDBEventSetEvent GDBEventSetEvent jv:libgdbs 'GDB-Core-Events' 0
--- a/bc.mak Thu Mar 19 08:25:30 2015 +0000
+++ b/bc.mak Thu Mar 19 08:43:28 2015 +0000
@@ -115,6 +115,7 @@
$(OUTDIR)GDBThreadStateStopped.$(O) GDBThreadStateStopped.$(H): GDBThreadStateStopped.st $(INCLUDE_TOP)\jv\libgdbs\GDBThreadState.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)GDBThreadStateTerminated.$(O) GDBThreadStateTerminated.$(H): GDBThreadStateTerminated.st $(INCLUDE_TOP)\jv\libgdbs\GDBThreadState.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)GDBUnixProcess.$(O) GDBUnixProcess.$(H): GDBUnixProcess.st $(INCLUDE_TOP)\jv\libgdbs\GDBProcess.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)GDBVariableObject.$(O) GDBVariableObject.$(H): GDBVariableObject.st $(INCLUDE_TOP)\jv\libgdbs\GDBObject.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)GDBBreakpoint.$(O) GDBBreakpoint.$(H): GDBBreakpoint.st $(INCLUDE_TOP)\jv\libgdbs\GDBDebuggerObject.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBObject.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)GDBConsoleOutputEvent.$(O) GDBConsoleOutputEvent.$(H): GDBConsoleOutputEvent.st $(INCLUDE_TOP)\jv\libgdbs\GDBEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBStreamOutputEvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)GDBEventSetEvent.$(O) GDBEventSetEvent.$(H): GDBEventSetEvent.st $(INCLUDE_TOP)\jv\libgdbs\GDBEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBInternalEvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
--- a/jv_libgdbs.st Thu Mar 19 08:25:30 2015 +0000
+++ b/jv_libgdbs.st Thu Mar 19 08:43:28 2015 +0000
@@ -113,6 +113,7 @@
GDBThreadStateStopped
GDBThreadStateTerminated
GDBUnixProcess
+ GDBVariableObject
GDBBreakpoint
GDBConsoleOutputEvent
GDBEventSetEvent
--- a/libInit.cc Thu Mar 19 08:25:30 2015 +0000
+++ b/libInit.cc Thu Mar 19 08:43:28 2015 +0000
@@ -66,6 +66,7 @@
_GDBThreadStateStopped_Init(pass,__pRT__,snd);
_GDBThreadStateTerminated_Init(pass,__pRT__,snd);
_GDBUnixProcess_Init(pass,__pRT__,snd);
+_GDBVariableObject_Init(pass,__pRT__,snd);
_GDBBreakpoint_Init(pass,__pRT__,snd);
_GDBConsoleOutputEvent_Init(pass,__pRT__,snd);
_GDBEventSetEvent_Init(pass,__pRT__,snd);
--- a/tests/GDBDebuggerTestsR.st Thu Mar 19 08:25:30 2015 +0000
+++ b/tests/GDBDebuggerTestsR.st Thu Mar 19 08:43:28 2015 +0000
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
"{ Package: 'jv:libgdbs/tests' }"
"{ NameSpace: Smalltalk }"
@@ -57,6 +59,8 @@
frame2 := thread1 stack second.
self assert: frame1 variables size == 1.
self assert: frame1 variables first name = 'i'.
+ self assert: frame1 variables first value = 'i'.
+
self assert: frame2 variables size == 4.
self assert: frame2 variables first name = 'argc'.
@@ -70,7 +74,7 @@
self assert: thread1 isDead
"Created: / 28-02-2015 / 00:55:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
- "Modified: / 08-03-2015 / 09:11:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 18-03-2015 / 16:49:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
test_03
--- a/tests/GDBMIParserTests.st Thu Mar 19 08:25:30 2015 +0000
+++ b/tests/GDBMIParserTests.st Thu Mar 19 08:43:28 2015 +0000
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
"{ Package: 'jv:libgdbs/tests' }"
"{ NameSpace: Smalltalk }"
@@ -62,7 +64,7 @@
self assert:(GDBMIParser on:'"\H\e\l\l\o" xxx') parseCString = 'Hello'.
self assert:(GDBMIParser on:'"Hel\nlo" xxx') parseCString = 'Hel
lo'.
- self assert:(GDBMIParser on:'"X\xE1X" xxx') parseCString = 'XáX'.
+ self assert:(GDBMIParser on:'"X\xE1X" xxx') parseCString = 'XáX'.
self
assert:(GDBMIParser
on:'"warning: File \"/home/jv/Private/Projects/SmalltalkX/sources/branches/jv1/build/stx/.gdbinit\" auto-loading has been declined by your `auto-load safe-path'' set to \"$debugdir:$datadir/auto-load\".\n"')
@@ -151,6 +153,24 @@
self assert: (result propertyAt:'threads') first state == GDBThreadStateRunning theOneAndOnlyInstance.
"Created: / 08-03-2015 / 08:13:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_command_var_create_01
+ | parser events result |
+
+ parser := GDBMIParser
+ on:'14^done,name="var1",numchild="0",value="5",type="int",thread-id="1",has_more="0"'.
+ parser token2CommandMappingBlock:[:token | GDBMI_var_create new ].
+ events := parser parseOutput.
+
+ self assert:events size == 1.
+ result := events first result.
+
+ self assert:((result value) isKindOf: GDBVariableObject).
+ self assert: (result value) name = 'var1'.
+ self assert: (result value) value = '5'.
+
+ "Created: / 19-03-2015 / 07:46:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!GDBMIParserTests methodsFor:'tests - examples'!