GDBConnection.st
changeset 79 303c4edc75ad
parent 78 c24e7d8bc881
child 85 6fea1000a2a5
equal deleted inserted replaced
78:c24e7d8bc881 79:303c4edc75ad
    25 
    25 
    26     "Created: / 20-06-2014 / 21:45:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    26     "Created: / 20-06-2014 / 21:45:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    27 ! !
    27 ! !
    28 
    28 
    29 !GDBConnection methodsFor:'accessing'!
    29 !GDBConnection methodsFor:'accessing'!
       
    30 
       
    31 consoleInput
       
    32     ^ process consoleInput
       
    33 
       
    34     "Created: / 02-06-2017 / 23:34:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
    35 !
       
    36 
       
    37 consoleOutput
       
    38     ^ process consoleOutput
       
    39 
       
    40     "Created: / 02-06-2017 / 23:35:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
    41 !
    30 
    42 
    31 eventAnnouncer
    43 eventAnnouncer
    32     ^ eventAnnouncer
    44     ^ eventAnnouncer
    33 !
    45 !
    34 
    46 
   163 ! !
   175 ! !
   164 
   176 
   165 !GDBConnection methodsFor:'event pump'!
   177 !GDBConnection methodsFor:'event pump'!
   166 
   178 
   167 eventPumpLoop
   179 eventPumpLoop
   168     | parser |
   180     | parser done |
   169 
   181 
   170     parser := GDBMIParser on:process debuggerOutput.
   182     parser := GDBMIParser on:process debuggerOutput.
   171     parser 
   183     parser 
   172         token2CommandMappingBlock:[:token | 
   184         token2CommandMappingBlock:[:token | 
   173             | command |
   185             | command |
   180             ].
   192             ].
   181             command
   193             command
   182         ].
   194         ].
   183     parser recorder:recorder.
   195     parser recorder:recorder.
   184     parser parsePostStartHeader.
   196     parser parsePostStartHeader.
       
   197     done := false.
   185     [
   198     [
   186         process debuggerOutput atEnd
   199         [
       
   200             done or:[ process debuggerOutput atEnd ]
       
   201         ] on: TerminateProcessRequest do:[:request| 
       
   202             done := true.    
       
   203         ].
   187     ] whileFalse:[
   204     ] whileFalse:[
   188         | eventset |
   205         | eventset |
   189 
   206 
   190         [
   207         [
   191             [
   208             [
   192                 eventset := parser parseOutput.
   209                 eventset := parser parseOutput.
       
   210                 (eventset contains:[:each | each isCommandResultEvent and:[ each status == #exit] ]) ifTrue:[ 
       
   211                     done := true.
       
   212                 ].
   193             ] on:StreamNotOpenError do:[ ^ self. ].
   213             ] on:StreamNotOpenError do:[ ^ self. ].
   194             self pushEventSet:eventset.
   214             self pushEventSet:eventset.
   195         ] on:AbortOperationRequest do:[
   215         ] on:AbortOperationRequest do:[
   196             | terminator  i  c |
   216             | terminator  i  c |
   197 
   217 
   211             ] ifFalse:[ ^ self. ].
   231             ] ifFalse:[ ^ self. ].
   212         ]
   232         ]
   213     ]
   233     ]
   214 
   234 
   215     "Created: / 02-06-2014 / 22:38:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   235     "Created: / 02-06-2014 / 22:38:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   216     "Modified: / 01-03-2015 / 08:26:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   236     "Modified: / 01-06-2017 / 22:22:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   217 !
   237 !
   218 
   238 
   219 eventPumpStart
   239 eventPumpStart
   220     eventPumpProcess isNil ifTrue:[
   240     eventPumpProcess isNil ifTrue:[
   221         eventPumpProcess := [
   241         eventPumpProcess := [
   306     "Created: / 26-05-2014 / 21:30:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   326     "Created: / 26-05-2014 / 21:30:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   307     "Modified: / 05-07-2014 / 22:20:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   327     "Modified: / 05-07-2014 / 22:20:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   308 !
   328 !
   309 
   329 
   310 released: status
   330 released: status
       
   331     self pushEvent: GDBExitEvent new.  
   311     TraceProcesses ifTrue:[ 
   332     TraceProcesses ifTrue:[ 
   312         Logger log: ('gdb process: exited with status %1' bindWith: status code)  severity: #trace facility: 'GDB'.
   333         Logger log: ('gdb process: exited with status %1' bindWith: status code)  severity: #trace facility: 'GDB'.
   313     ].
       
   314     TraceProcesses ifTrue:[ 
       
   315         Logger log: 'gdb process: waiting for event pump to finish' severity: #trace facility: 'GDB'.
   334         Logger log: 'gdb process: waiting for event pump to finish' severity: #trace facility: 'GDB'.
   316     ].
   335     ].
   317     [ eventPumpProcess notNil ] whileTrue:[ 
   336     self eventPumpStop.
   318         Delay waitForMilliseconds: 200.  
       
   319     ].
       
   320     TraceProcesses ifTrue:[ 
       
   321         Logger log: ('gdb process: event pump finished' bindWith: status code)  severity: #trace facility: 'GDB'.
       
   322     ].
       
   323     eventQueueNotifier signalForAll.           
   337     eventQueueNotifier signalForAll.           
   324     process release.
   338     process release.
   325     inferiorPTY release.
   339     inferiorPTY release.
   326 
   340 
   327     "Created: / 26-05-2014 / 21:31:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   341     "Created: / 26-05-2014 / 21:31:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   328     "Modified: / 25-08-2014 / 08:55:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   342     "Modified: / 01-06-2017 / 22:24:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   329 ! !
   343 ! !
   330 
   344 
   331 !GDBConnection class methodsFor:'documentation'!
   345 !GDBConnection class methodsFor:'documentation'!
   332 
   346 
   333 version_HG
   347 version_HG