GDBDebugger.st
author Jan Vrany <jan.vrany@labware.com>
Mon, 06 Sep 2021 15:09:24 +0100
changeset 235 51f916ee4111
parent 231 dcadeaddd0c8
child 236 e36e28215fd9
permissions -rw-r--r--
Renamed `GDBEventSet` to `GDBEventSequence` and related events. This is a preparation to reintroduce `GDBEventSet` for different purpose - to be able to handle multiple unrelated events using the same handler, in similar sense to `SignalSet`.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
128
8d7c075a06b9 API: added GDBDebugger >> #targetConnect:parameters:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 126
diff changeset
     1
"{ Encoding: utf8 }"
8d7c075a06b9 API: added GDBDebugger >> #targetConnect:parameters:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 126
diff changeset
     2
91
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
     3
"
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
     4
jv:libgdbs - GNU Debugger Interface Library
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
     5
Copyright (C) 2015-now Jan Vrany
220
372b64967435 Minor cleanup of handling of `=thread-selected` event
Jan Vrany <jan.vrany@labware.com>
parents: 219
diff changeset
     6
Copyright (C) 2021 LabWare
91
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
     7
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
     8
This library is free software; you can redistribute it and/or
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
     9
modify it under the terms of the GNU Lesser General Public
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    10
License as published by the Free Software Foundation; either
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    11
version 2.1 of the License. 
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    12
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    13
This library is distributed in the hope that it will be useful,
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    14
but WITHOUT ANY WARRANTY; without even the implied warranty of
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    15
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    16
Lesser General Public License for more details.
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    17
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    18
You should have received a copy of the GNU Lesser General Public
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    19
License along with this library; if not, write to the Free Software
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    20
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    21
"
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
"{ Package: 'jv:libgdbs' }"
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
53
63669c2c0f9e Test fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
    24
"{ NameSpace: Smalltalk }"
63669c2c0f9e Test fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
    25
223
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
    26
Model subclass:#GDBDebugger
35
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
    27
	instanceVariableNames:'connection commandSequenceNumber inferiorStateSequenceNumber
223
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
    28
		inferiors breakpoints selectedThread selectedFrame
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
    29
		prettyPrintingEnabled frameFiltersEnabled finalizationRegistry
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
    30
		debuggerFeatures targetFeatures supportedCommands directories
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
    31
		properties'
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
	classVariableNames:''
111
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
    33
	poolDictionaries:'GDBCommandStatus GDBFeatures'
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
	category:'GDB-Core'
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
!
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
91
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    37
!GDBDebugger class methodsFor:'documentation'!
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    38
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    39
copyright
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    40
"
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    41
jv:libgdbs - GNU Debugger Interface Library
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    42
Copyright (C) 2015-now Jan Vrany
220
372b64967435 Minor cleanup of handling of `=thread-selected` event
Jan Vrany <jan.vrany@labware.com>
parents: 219
diff changeset
    43
Copyright (C) 2021 LabWare
91
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    44
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    45
This library is free software; you can redistribute it and/or
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    46
modify it under the terms of the GNU Lesser General Public
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    47
License as published by the Free Software Foundation; either
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    48
version 2.1 of the License. 
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    49
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    50
This library is distributed in the hope that it will be useful,
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    51
but WITHOUT ANY WARRANTY; without even the implied warranty of
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    52
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    53
Lesser General Public License for more details.
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    54
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    55
You should have received a copy of the GNU Lesser General Public
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    56
License along with this library; if not, write to the Free Software
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    57
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    58
"
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    59
! !
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    60
21
83395ca8b257 Renamed GDB to GDBDebugger
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
    61
!GDBDebugger class methodsFor:'instance creation'!
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
93
b1715ebf8df1 Resurected old `GDBProcess` implementation using pipes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 91
diff changeset
    63
new    
b1715ebf8df1 Resurected old `GDBProcess` implementation using pipes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 91
diff changeset
    64
    ^ self newWithProcess: GDBProcess new
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
    65
93
b1715ebf8df1 Resurected old `GDBProcess` implementation using pipes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 91
diff changeset
    66
    "Modified: / 12-12-2017 / 21:15:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
    67
!
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
    69
newWithProcess: aGDBProcess
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
    70
    ^ self basicNew initializeWithProcess: aGDBProcess
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
    71
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
    72
    "Created: / 20-06-2014 / 21:44:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
! !
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    74
21
83395ca8b257 Renamed GDB to GDBDebugger
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
    75
!GDBDebugger methodsFor:'accessing'!
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    76
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    77
announcer
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
    78
    ^ connection eventAnnouncer.
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    79
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    80
    "Created: / 02-06-2014 / 23:06:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    81
!
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    82
120
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
    83
breakpointForId: id
175
a04e1a36e888 Fix for multi-location breakpoints created initially as pending
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
    84
    ^ self breakpointForId: id ifAbsent:[self error: ('No breakpoint with id ''%1'' found!!' bindWith: id)]
a04e1a36e888 Fix for multi-location breakpoints created initially as pending
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
    85
a04e1a36e888 Fix for multi-location breakpoints created initially as pending
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
    86
    "Created: / 18-05-2018 / 13:39:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
a04e1a36e888 Fix for multi-location breakpoints created initially as pending
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
    87
    "Modified: / 07-02-2019 / 15:04:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
a04e1a36e888 Fix for multi-location breakpoints created initially as pending
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
    88
!
a04e1a36e888 Fix for multi-location breakpoints created initially as pending
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
    89
a04e1a36e888 Fix for multi-location breakpoints created initially as pending
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
    90
breakpointForId: id ifAbsent: block
120
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
    91
    self breakpoints do:[:bp |
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
    92
        bp number = id ifTrue:[ ^ bp ].
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
    93
        bp locations do: [ :loc |
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
    94
            loc number = id ifTrue:[ ^ loc ].
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
    95
        ].
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
    96
    ].
175
a04e1a36e888 Fix for multi-location breakpoints created initially as pending
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
    97
    ^ block value.
120
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
    98
175
a04e1a36e888 Fix for multi-location breakpoints created initially as pending
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
    99
    "Created: / 07-02-2019 / 15:04:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
120
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   100
!
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   101
87
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   102
breakpoints
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   103
    breakpoints isNil ifTrue:[ 
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   104
        breakpoints := List new.
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   105
    ].
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   106
    ^ breakpoints
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   107
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   108
    "Created: / 06-07-2017 / 16:06:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   109
!
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   110
79
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   111
consoleInput
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   112
    ^ connection consoleInput
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   113
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   114
    "Created: / 31-05-2017 / 23:20:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   115
    "Modified: / 02-06-2017 / 23:13:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   116
!
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   117
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   118
consoleOutput
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   119
    ^ connection consoleOutput
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   120
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   121
    "Created: / 31-05-2017 / 23:20:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   122
    "Modified: / 02-06-2017 / 23:13:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   123
!
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   124
114
be5bdaecb9b3 API: added methods for querying source directories
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
   125
directories
be5bdaecb9b3 API: added methods for querying source directories
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
   126
    "Return a list of directories where GDB looks for source code and an Array.
be5bdaecb9b3 API: added methods for querying source directories
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
   127
     Variables such as $cdir and $cwd are NOT expanded.
be5bdaecb9b3 API: added methods for querying source directories
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
   128
    "
be5bdaecb9b3 API: added methods for querying source directories
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
   129
    | result |
be5bdaecb9b3 API: added methods for querying source directories
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
   130
be5bdaecb9b3 API: added methods for querying source directories
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
   131
    directories isNil ifTrue:[
be5bdaecb9b3 API: added methods for querying source directories
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
   132
        result := self send: (GDBMI_gdb_show arguments: #('directories')).
119
258bf0b2317c Fixed `GDBDebugger >> directories` to work on Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 116
diff changeset
   133
258bf0b2317c Fixed `GDBDebugger >> directories` to work on Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 116
diff changeset
   134
        OperatingSystem isMSWINDOWSlike ifTrue:[ 
258bf0b2317c Fixed `GDBDebugger >> directories` to work on Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 116
diff changeset
   135
            "/ On Windows, GDB uses cygwin paths (i.e., slashed, unix-like paths). 
258bf0b2317c Fixed `GDBDebugger >> directories` to work on Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 116
diff changeset
   136
            "/ Convert them to Windows paths as used in Smalltalk/X:
258bf0b2317c Fixed `GDBDebugger >> directories` to work on Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 116
diff changeset
   137
            directories := ((result propertyAt: #value) tokensBasedOn: $;) 
258bf0b2317c Fixed `GDBDebugger >> directories` to work on Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 116
diff changeset
   138
                                collect: [ :d | (Filename cygNamed:d) pathName ]
258bf0b2317c Fixed `GDBDebugger >> directories` to work on Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 116
diff changeset
   139
                                as: Array.
258bf0b2317c Fixed `GDBDebugger >> directories` to work on Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 116
diff changeset
   140
        ] ifFalse:[ 
258bf0b2317c Fixed `GDBDebugger >> directories` to work on Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 116
diff changeset
   141
            directories := ((result propertyAt: #value) tokensBasedOn: $:) asArray
258bf0b2317c Fixed `GDBDebugger >> directories` to work on Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 116
diff changeset
   142
        ].
114
be5bdaecb9b3 API: added methods for querying source directories
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
   143
    ].
be5bdaecb9b3 API: added methods for querying source directories
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
   144
    ^ directories
be5bdaecb9b3 API: added methods for querying source directories
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
   145
be5bdaecb9b3 API: added methods for querying source directories
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
   146
    "Created: / 09-03-2018 / 12:05:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
119
258bf0b2317c Fixed `GDBDebugger >> directories` to work on Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 116
diff changeset
   147
    "Modified: / 03-04-2018 / 21:14:45 / jv"
114
be5bdaecb9b3 API: added methods for querying source directories
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
   148
!
be5bdaecb9b3 API: added methods for querying source directories
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
   149
111
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   150
features
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   151
    "Return a list of features supported ty this version og GDB.
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   152
     See 
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   153
            * GDBFeatures` pool
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   154
            * https://sourceware.org/gdb/onlinedocs/gdb/GDB_002fMI-Support-Commands.html,
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   155
              command `-list-features`
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   156
    "
116
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   157
    ^ debuggerFeatures , (targetFeatures ? connection nativeTargetFeatures)
111
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   158
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   159
    "Created: / 07-02-2018 / 10:50:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
116
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   160
    "Modified: / 26-03-2018 / 21:35:22 / jv"
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   161
    "Modified: / 09-04-2018 / 15:39:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
111
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   162
!
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   163
36
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   164
inferiorForId: id
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   165
    ^ inferiors ? #() detect:[:e | e id = id ] ifNone:[ 
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   166
        self error: ('No inferior (thread group) with id ''%1'' found!!' bindWith: id)
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   167
    ].
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   168
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   169
    "Created: / 07-09-2014 / 21:22:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   170
!
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   171
10
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   172
inferiorStderr
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   173
    ^ connection inferiorPTY master
10
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   174
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   175
    "Created: / 09-06-2014 / 10:01:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
11
474fbb650afe PTY support refactored to use GDBPTY object.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10
diff changeset
   176
    "Modified: / 09-06-2014 / 18:26:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
10
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   177
!
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   178
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   179
inferiorStdin
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   180
    ^ connection inferiorPTY master
10
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   181
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   182
    "Created: / 09-06-2014 / 10:00:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
11
474fbb650afe PTY support refactored to use GDBPTY object.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10
diff changeset
   183
    "Modified: / 09-06-2014 / 18:27:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
10
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   184
!
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   185
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   186
inferiorStdout
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   187
    ^ connection inferiorPTY master
10
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   188
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   189
    "Created: / 09-06-2014 / 10:01:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
11
474fbb650afe PTY support refactored to use GDBPTY object.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10
diff changeset
   190
    "Modified: / 09-06-2014 / 18:27:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
35
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   191
!
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   192
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   193
inferiors
87
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   194
    ^ inferiors ? #()
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   195
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   196
    "Modified: / 06-07-2017 / 16:06:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   197
!
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   198
223
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   199
selectedFrame
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   200
    ^ selectedFrame
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   201
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   202
    "Created: / 09-03-2021 / 14:46:20 / Jan Vrany <jan.vrany@labware.com>"
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   203
!
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   204
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   205
selectedInferior
223
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   206
    selectedThread isNil ifTrue: [ 
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   207
        inferiors size == 1 ifTrue: [ 
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   208
            ^ inferiors anyOne
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   209
        ].
223
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   210
        ^ nil
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   211
    ].
223
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   212
    ^ selectedThread group
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   213
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   214
    "Created: / 07-09-2014 / 23:02:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
223
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   215
    "Modified: / 09-03-2021 / 16:16:49 / Jan Vrany <jan.vrany@labware.com>"
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   216
!
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   217
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   218
selectedThread
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   219
    ^ selectedThread
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   220
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   221
    "Created: / 09-03-2021 / 16:06:07 / Jan Vrany <jan.vrany@labware.com>"
106
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
   222
!
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
   223
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
   224
threadForId: id
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
   225
    inferiors ? #() do:[:tg |
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
   226
        tg threads do:[:t | 
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
   227
            t id = id ifTrue:[ ^ t ]
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
   228
        ].
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
   229
    ].
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
   230
    self error: ('No thread with id ''%1'' found!!' bindWith: id)
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
   231
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
   232
    "Created: / 04-02-2018 / 21:37:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
10
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   233
! !
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   234
21
83395ca8b257 Renamed GDB to GDBDebugger
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   235
!GDBDebugger methodsFor:'accessing-private'!
10
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   236
113
c4f07d0e7b7a GNI/MI: added custom inspector view for viewing GDB/MI comminicatication trace
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
   237
connectionTrace
c4f07d0e7b7a GNI/MI: added custom inspector view for viewing GDB/MI comminicatication trace
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
   238
    ^ connection trace
c4f07d0e7b7a GNI/MI: added custom inspector view for viewing GDB/MI comminicatication trace
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
   239
c4f07d0e7b7a GNI/MI: added custom inspector view for viewing GDB/MI comminicatication trace
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
   240
    "Created: / 09-03-2018 / 10:04:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
c4f07d0e7b7a GNI/MI: added custom inspector view for viewing GDB/MI comminicatication trace
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
   241
!
c4f07d0e7b7a GNI/MI: added custom inspector view for viewing GDB/MI comminicatication trace
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
   242
19
c48d33e27d34 Added internal announcer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 12
diff changeset
   243
currentInferiorStateSequnceNumber
c48d33e27d34 Added internal announcer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 12
diff changeset
   244
    ^ inferiorStateSequenceNumber
c48d33e27d34 Added internal announcer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 12
diff changeset
   245
c48d33e27d34 Added internal announcer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 12
diff changeset
   246
    "Created: / 19-06-2014 / 22:22:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
c48d33e27d34 Added internal announcer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 12
diff changeset
   247
!
c48d33e27d34 Added internal announcer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 12
diff changeset
   248
102
d573a3b2abe2 Variable objects: delete var. objects that are no longer needed
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 97
diff changeset
   249
finalizationRegistry
d573a3b2abe2 Variable objects: delete var. objects that are no longer needed
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 97
diff changeset
   250
    ^ finalizationRegistry
d573a3b2abe2 Variable objects: delete var. objects that are no longer needed
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 97
diff changeset
   251
!
d573a3b2abe2 Variable objects: delete var. objects that are no longer needed
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 97
diff changeset
   252
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   253
nextCommandSequnceNumber
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   254
    commandSequenceNumber := commandSequenceNumber + 1.
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   255
    commandSequenceNumber == SmallInteger maxVal ifTrue:[ 
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   256
        commandSequenceNumber := 0.
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   257
    ].
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   258
    ^ commandSequenceNumber
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   259
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   260
    "Created: / 02-06-2014 / 23:48:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   261
!
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   262
19
c48d33e27d34 Added internal announcer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 12
diff changeset
   263
nextInferiorStateSequnceNumber
c48d33e27d34 Added internal announcer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 12
diff changeset
   264
    inferiorStateSequenceNumber := inferiorStateSequenceNumber + 1.
c48d33e27d34 Added internal announcer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 12
diff changeset
   265
    inferiorStateSequenceNumber == SmallInteger maxVal ifTrue:[
c48d33e27d34 Added internal announcer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 12
diff changeset
   266
        inferiorStateSequenceNumber := 0.
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   267
    ].
19
c48d33e27d34 Added internal announcer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 12
diff changeset
   268
    ^ inferiorStateSequenceNumber
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   269
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   270
    "Created: / 02-06-2014 / 23:48:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
185
4e1be69b39ce API: add `GDBDebugger >> process`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 180
diff changeset
   271
!
4e1be69b39ce API: add `GDBDebugger >> process`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 180
diff changeset
   272
4e1be69b39ce API: add `GDBDebugger >> process`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 180
diff changeset
   273
process
4e1be69b39ce API: add `GDBDebugger >> process`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 180
diff changeset
   274
    "Return a (sub)instance of `GDBProcess` used but this debugger.
4e1be69b39ce API: add `GDBDebugger >> process`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 180
diff changeset
   275
4e1be69b39ce API: add `GDBDebugger >> process`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 180
diff changeset
   276
     This method is provided for stx:libgdbs debugging purposes and
4e1be69b39ce API: add `GDBDebugger >> process`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 180
diff changeset
   277
     should not be normally used."
4e1be69b39ce API: add `GDBDebugger >> process`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 180
diff changeset
   278
4e1be69b39ce API: add `GDBDebugger >> process`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 180
diff changeset
   279
    ^ connection process
4e1be69b39ce API: add `GDBDebugger >> process`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 180
diff changeset
   280
4e1be69b39ce API: add `GDBDebugger >> process`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 180
diff changeset
   281
    "Created: / 27-03-2019 / 09:20:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
223
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   282
!
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   283
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   284
selectedThread: thread frame: frame
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   285
    selectedThread ~= thread ifTrue: [ 
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   286
        | oldSelectedInferior newSelectedInferior |
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   287
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   288
        oldSelectedInferior := self selectedInferior.
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   289
        selectedThread := thread.
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   290
        selectedFrame := frame.
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   291
        newSelectedInferior := self selectedInferior.
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   292
        oldSelectedInferior ~~ newSelectedInferior ifTrue: [ 
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   293
            self changed: #selectedInferior with: newSelectedInferior.
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   294
        ].
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   295
        self changed: #selectedThread with: selectedThread.
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   296
        self changed: #selectedFrame with: selectedFrame
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   297
    ] ifFalse: [ 
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   298
        selectedFrame ~= frame ifTrue: [ 
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   299
            selectedFrame := frame.
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   300
            self changed: #selectedFrame with: selectedFrame
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   301
        ].
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   302
    ].
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   303
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   304
    "Created: / 09-03-2021 / 14:54:42 / Jan Vrany <jan.vrany@labware.com>"
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   305
    "Modified: / 10-03-2021 / 19:12:57 / Jan Vrany <jan.vrany@labware.com>"
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   306
! !
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   307
196
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   308
!GDBDebugger methodsFor:'accessing-properties'!
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   309
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   310
properties
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   311
    ^ self objectAttributes
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   312
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   313
    "Modified: / 23-06-2019 / 12:22:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   314
!
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   315
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   316
propertyAt: name    
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   317
    ^ self objectAttributeAt: name
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   318
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   319
    "Created: / 31-05-2014 / 00:00:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   320
    "Modified: / 23-06-2019 / 12:22:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   321
!
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   322
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   323
propertyAt: name put: value
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   324
    self assert: name isSymbol.
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   325
    ^ self objectAttributeAt: name put: value.
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   326
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   327
    "Created: / 31-05-2014 / 00:01:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   328
    "Modified: / 23-06-2019 / 12:22:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   329
! !
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   330
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   331
!GDBDebugger methodsFor:'attributes access'!
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   332
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   333
objectAttributes
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   334
    ^ properties
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   335
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   336
    "Created: / 18-06-2014 / 07:56:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   337
!
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   338
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   339
objectAttributes: aDictionary
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   340
    properties := aDictionary
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   341
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   342
    "Created: / 18-06-2014 / 07:57:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   343
! !
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   344
21
83395ca8b257 Renamed GDB to GDBDebugger
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   345
!GDBDebugger methodsFor:'commands'!
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   346
222
2c06fc7c39f5 Add command pre-execute and post-executehook
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   347
push: event
2c06fc7c39f5 Add command pre-execute and post-executehook
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   348
    "Push given `event` onto debugger's event queue. Use with care!!"
2c06fc7c39f5 Add command pre-execute and post-executehook
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   349
2c06fc7c39f5 Add command pre-execute and post-executehook
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   350
    self assert: (event isKindOf: GDBEvent).
2c06fc7c39f5 Add command pre-execute and post-executehook
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   351
    connection pushEvent: event
2c06fc7c39f5 Add command pre-execute and post-executehook
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   352
2c06fc7c39f5 Add command pre-execute and post-executehook
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   353
    "Created: / 09-03-2021 / 11:19:05 / Jan Vrany <jan.vrany@labware.com>"
2c06fc7c39f5 Add command pre-execute and post-executehook
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   354
!
2c06fc7c39f5 Add command pre-execute and post-executehook
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   355
56
20989de12cfb More work on variables + tests
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 53
diff changeset
   356
send: command
64
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   357
    "Execute given `command` and wait until it finishes and return its result.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   358
     `command` may be either a GDBCommand or string, in which case it will
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   359
     be parsed into a GDBCommand. 
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   360
   "
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   361
    ^ self send:command andWait:true.
8
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   362
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   363
    "Created: / 03-06-2014 / 00:10:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
64
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   364
    "Modified (comment): / 08-03-2015 / 05:50:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
8
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   365
!
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   366
64
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   367
send:command andWait:wait 
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   368
    "Sends given `command` to GDB. If `wait` is true, wait for
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   369
     command to finish and return the command result.  
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   370
     Otherwise, return nil immediately.
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   371
85
6fea1000a2a5 Implemented proper quoting of MI commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 82
diff changeset
   372
     If `wait` is true and if command results in an error GDBError
6fea1000a2a5 Implemented proper quoting of MI commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 82
diff changeset
   373
     is thrown.
6fea1000a2a5 Implemented proper quoting of MI commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 82
diff changeset
   374
64
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   375
     `command` may be either a GDBCommand or string, in which case it will
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   376
     be parsed into a GDBCommand.           
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   377
    "
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   378
    
96
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   379
    | blocker result |
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   380
105
1d4ca4370d05 Report gdb's exist status in `GDBExitEvent` in case `gdb` terminates prematurely
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   381
    self assert: self isConnected.
64
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   382
    ^ wait ifTrue:[
148
9fb679577cac Forbid blocking calls to `#send:andWait:` and: `send:andWaitFor:withTimeoutMs` from within an event dispatcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 144
diff changeset
   383
        self 
9fb679577cac Forbid blocking calls to `#send:andWait:` and: `send:andWaitFor:withTimeoutMs` from within an event dispatcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 144
diff changeset
   384
            assert:Processor activeProcess ~~ connection eventDispatchProcess
9fb679577cac Forbid blocking calls to `#send:andWait:` and: `send:andWaitFor:withTimeoutMs` from within an event dispatcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 144
diff changeset
   385
            message:'Cannot send commands from within event dispatching process. Would deadlock'.
96
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   386
        blocker := Semaphore new.
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   387
        self send: command andWithResultDo: [ :r | 
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   388
            result := r.
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   389
            blocker signal
64
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   390
        ].
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   391
        blocker wait.
85
6fea1000a2a5 Implemented proper quoting of MI commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 82
diff changeset
   392
        result isError ifTrue:[
88
90c50fd6374c Introduced new exception class: `GDBCommandFailedError`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 87
diff changeset
   393
            GDBCommandFailedError raiseForResult: result.
85
6fea1000a2a5 Implemented proper quoting of MI commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 82
diff changeset
   394
        ].
40
0ce76b671515 Some more support for stack frames.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 38
diff changeset
   395
        result.
64
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   396
    ]
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   397
    ifFalse:[
96
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   398
        | cmd |
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   399
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   400
        cmd := command.
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   401
        cmd isString ifTrue:[
174
18ef81a3fee5 Add `GDBCLICommand >> #operation` returning (expanded) CLI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 172
diff changeset
   402
            cmd := GDBCommand parse:cmd.
96
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   403
        ].    
116
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   404
        cmd token: self nextCommandSequnceNumber.
64
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   405
        connection pushEvent:(GDBCommandEvent new command:cmd).
40
0ce76b671515 Some more support for stack frames.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 38
diff changeset
   406
        nil.
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   407
    ]
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   408
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   409
    "Created: / 02-06-2014 / 23:45:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
116
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   410
    "Modified: / 26-03-2018 / 21:19:59 / jv"
174
18ef81a3fee5 Add `GDBCLICommand >> #operation` returning (expanded) CLI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 172
diff changeset
   411
    "Modified: / 28-01-2019 / 21:26:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
64
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   412
!
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   413
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   414
send:command andWaitFor:eventHandlers
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   415
    "Sends given `command` to GDB and then wait for events mathing 
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   416
     `eventHandlers`. 
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   417
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   418
     Params:
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   419
     `command`      may be either a GDBCommand or string, in which case it will
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   420
                    be parsed into a GDBCommand.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   421
     `eventHandler` may be either nil or event class or one arg block or collection
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   422
                    of event classes or blocks.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   423
                    - If nil then do not wait for anything (use nil for async send)
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   424
                    - If event class, then wait for an event of that class. Note, that
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   425
                      subclasses are handled too.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   426
                    - If block, then wait for an event for which the block returns true.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   427
                    - If collectio, then wait for a sequence of events, each matched as above.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   428
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   429
     Returns:       a matching event or events (in case a collection of handlers has been passes)"
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   430
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   431
    ^ self send: command andWaitFor: eventHandlers withTimeoutMs: nil
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   432
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   433
    "Created: / 08-03-2015 / 06:03:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   434
!
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   435
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   436
send:command andWaitFor:eventHandlers withTimeoutMs:timeout 
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   437
    "Sends given `command` to GDB and then wait for events mathing 
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   438
     `eventHandlers`. Raise a TimeoutError if expected events don't arrive
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   439
     in specified time.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   440
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   441
     Params:
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   442
     `command`      may be either a GDBCommand or string, in which case it will
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   443
                    be parsed into a GDBCommand.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   444
     `eventHandler` may be either nil or event class or one arg block or collection
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   445
                    of event classes or blocks.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   446
                    - If nil then do not wait for anything (use nil for async send)
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   447
                    - If event class, then wait for an event of that class. Note, that
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   448
                      subclasses are handled too.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   449
                    - If block, then wait for an event for which the block returns true.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   450
                    - If collectio, then wait for a sequence of events, each matched as above.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   451
     `timeout`       wait at most that much milliseconds, throw TimeoutError otherwise. If `timeout` == mil
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   452
                    then wait for indefinitly
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   453
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   454
     Returns:       a matching event or events (in case a collection of handlers has been passes)"
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   455
    
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   456
    | commandObject |
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   457
105
1d4ca4370d05 Report gdb's exist status in `GDBExitEvent` in case `gdb` terminates prematurely
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   458
    self assert: self isConnected.
64
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   459
    command isString ifTrue:[
169
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   460
        commandObject := GDBCommand parse: command.
64
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   461
        commandObject token:self nextCommandSequnceNumber.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   462
    ] ifFalse:[
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   463
        commandObject := command.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   464
        commandObject token isNil ifTrue:[
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   465
            commandObject token:self nextCommandSequnceNumber.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   466
        ].
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   467
    ].
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   468
    ^ self 
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   469
        do:[ connection pushEvent:(GDBCommandEvent new command: commandObject) ] 
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   470
        andWaitFor: eventHandlers 
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   471
        withTimeoutMs: timeout
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   472
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   473
    "Created: / 07-03-2015 / 11:38:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
169
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   474
    "Modified: / 19-01-2019 / 23:05:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
96
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   475
!
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   476
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   477
send:command andWithResultDo: block
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   478
    "Sends given `command` to GDB and return nil immediately. Once the command
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   479
     is processed and result returned, evaluate `block` passing the
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   480
     result (as instance of GDBCommandResult)
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   481
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   482
     The `command` may be either a GDBCommand or string, in which case it will
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   483
     be parsed into a GDBCommand.
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   484
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   485
     When calling this method from a UI code, i.e., from an UI even loop, keep
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   486
     in mind that the block will be evaluated from within GDB's internal event
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   487
     dispatch loop.
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   488
166
5cb191425081 Add class for new MI command `-complete`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 165
diff changeset
   489
     It's is a good practice not to do anything real within the block but just
5cb191425081 Add class for new MI command `-complete`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 165
diff changeset
   490
     grab the result and let it be processed within UI event loop, e.g.
96
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   491
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   492
         doSomeAction
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   493
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   494
             debugger send: (GDBMI_data_read_memory arguments:...) 
166
5cb191425081 Add class for new MI command `-complete`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 165
diff changeset
   495
                      andWithResultDo:[ :result | self sensor pushUserEvent: #updateWithResult: with: result ].
96
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   496
    "
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   497
    
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   498
    | cmd  token handler1  handler2  result |
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   499
105
1d4ca4370d05 Report gdb's exist status in `GDBExitEvent` in case `gdb` terminates prematurely
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   500
    self assert: self isConnected.
96
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   501
    cmd := command.
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   502
    cmd isString ifTrue:[
169
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   503
        cmd := GDBCommand parse:cmd.
96
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   504
    ].
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   505
    token := self nextCommandSequnceNumber.
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   506
    cmd token:token.
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   507
    handler1 := [:ev | 
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   508
        ev token == token ifTrue:[
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   509
            connection eventAnnouncer unsubscribe:handler1.
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   510
            result := ev result.
235
51f916ee4111 Renamed `GDBEventSet` to `GDBEventSequence`
Jan Vrany <jan.vrany@labware.com>
parents: 231
diff changeset
   511
            connection eventAnnouncerInternal when:GDBEventSequenceProcessingFinished
96
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   512
                do:handler2.
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   513
        ]
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   514
    ].
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   515
    handler2 := [:ev | 
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   516
        connection eventAnnouncerInternal unsubscribe:handler2.
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   517
        block value: result.
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   518
    ].
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   519
    connection eventAnnouncer when:GDBCommandResultEvent do:handler1.
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   520
    connection pushEvent:(GDBCommandEvent new command:cmd).
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   521
    ^ nil
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   522
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   523
    "Created: / 26-01-2018 / 21:47:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
116
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   524
    "Modified: / 26-03-2018 / 21:48:02 / jv"
169
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   525
    "Modified: / 19-01-2019 / 23:06:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
235
51f916ee4111 Renamed `GDBEventSet` to `GDBEventSequence`
Jan Vrany <jan.vrany@labware.com>
parents: 231
diff changeset
   526
    "Modified: / 06-09-2021 / 15:01:25 / Jan Vrany <jan.vrany@labware.com>"
64
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   527
! !
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   528
82
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   529
!GDBDebugger methodsFor:'commands - API'!
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   530
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   531
attach: aStringOrInteger
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   532
    "Attach to a running process.
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   533
     API equivalent to CLI command:
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   534
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   535
        (gdb) attach <aStringOrInteger>
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   536
    "
97
b17c889076e4 Added API for memory dumps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 96
diff changeset
   537
    self send:(GDBMI_target_attach arguments:(Array with: aStringOrInteger asString)).
82
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   538
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   539
    "Created: / 05-06-2017 / 17:08:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
97
b17c889076e4 Added API for memory dumps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 96
diff changeset
   540
    "Modified: / 25-01-2018 / 23:28:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
82
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   541
!
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   542
126
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   543
disassembleFile: file line: line count: count
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   544
    "
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   545
    Disassemble `count` source lines from `file` starting at line `line`.
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   546
    Returns a list of GDBInstructionsAndSourceLine objects.
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   547
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   548
    If `count` is nil, then disassemble entire function at given
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   549
    source `file` and `line`.
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   550
    "
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   551
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   552
    | cmd result disassembly |
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   553
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   554
    self assert: file isString.
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   555
    self assert: line isInteger.
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   556
    self assert:(count isNil or:[ count isInteger ]).
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   557
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   558
    count notNil ifTrue:[ 
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   559
        cmd := GDBMI_data_disassemble arguments: (Array with: '-f' with: file with: '-l' with: line with: '-n' with: count with: '--' with: 5)
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   560
    ] ifFalse:[ 
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   561
        cmd := GDBMI_data_disassemble arguments: (Array with: '-f' with: file with: '-l' with: line                        with: '--' with: 5)
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   562
    ].
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   563
    result := self send: cmd.
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   564
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   565
    disassembly := result propertyAt: 'asm_insns'
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   566
.   disassembly do:[:each | each setDebugger: self ].
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   567
    ^ disassembly
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   568
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   569
    "Created: / 22-06-2018 / 11:42:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   570
!
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   571
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   572
disassembleFunction: address
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   573
    "
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   574
    Disassemble function at given `address` (given as String). Address
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   575
    might be any expression evaluable by GDB or function name (as it 
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   576
    appears in debug info)
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   577
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   578
    WARNING: This requires feature 'data-disassemble-a-option'.
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   579
    This feature is not present in GDB as of 8.1 and likely won't be in
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   580
    8.2.
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   581
    "
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   582
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   583
    | result disassembly |
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   584
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   585
    self assert: address isString.
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   586
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   587
    self ensureFeature: 'data-disassemble-a-option'.
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   588
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   589
    result := self send: (GDBMI_data_disassemble arguments: (Array with: '-a' with: address with: '--' with: 5)).
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   590
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   591
    disassembly := result propertyAt: 'asm_insns'
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   592
.   disassembly do:[:each | each setDebugger: self ].
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   593
    ^ disassembly
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   594
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   595
    "Created: / 03-07-2018 / 14:31:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   596
!
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   597
82
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   598
enableFrameFilters
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   599
    "Enables frame filters & frame decorators for MI interface. Once enabled,
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   600
     cannot be turned off.
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   601
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   602
     @see GDBMI_enable_frame_filters"
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   603
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   604
    | result |
111
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   605
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   606
    self ensureFeature: DebuggerFeaturePython.  
82
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   607
    result := self send: GDBMI_enable_frame_filters new.
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   608
    result isDone ifTrue:[ 
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   609
        frameFiltersEnabled := true.
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   610
    ] ifFalse:[ 
153
dd55019f1d86 Partability: use ANSI `#signal:` to raise an exception
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 148
diff changeset
   611
        GDBError signal: 'failed to enable frame filters'
82
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   612
    ].
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   613
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   614
    "Created: / 12-06-2017 / 09:29:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
153
dd55019f1d86 Partability: use ANSI `#signal:` to raise an exception
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 148
diff changeset
   615
    "Modified: / 21-10-2018 / 08:07:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
82
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   616
!
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   617
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   618
enablePrettyPrinting
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   619
    "Enables pretty printing for MI interface. Once enabled,
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   620
     cannot be turned off.
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   621
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   622
     @see GDBMI_enable_pretty_printing"
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   623
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   624
    | result |
111
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   625
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   626
    self ensureFeature: DebuggerFeaturePython.  
82
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   627
    result := self send: GDBMI_enable_pretty_printing new.
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   628
    result isDone ifTrue:[ 
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   629
        prettyPrintingEnabled := true.
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   630
    ] ifFalse:[ 
153
dd55019f1d86 Partability: use ANSI `#signal:` to raise an exception
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 148
diff changeset
   631
        GDBError signal: 'failed to enable pretty printing'
82
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   632
    ].
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   633
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   634
    "Created: / 12-06-2017 / 09:29:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
153
dd55019f1d86 Partability: use ANSI `#signal:` to raise an exception
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 148
diff changeset
   635
    "Modified: / 21-10-2018 / 08:07:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
82
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   636
!
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   637
109
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   638
evaluate: expression
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   639
    "Evaluates passed `expression` (in target language) in current thread.
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   640
     Returns the result as `GDBVariableObject`,"
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   641
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   642
    ^ self evaluate: expression in: nil
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   643
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   644
    "Created: / 20-03-2018 / 22:53:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   645
!
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   646
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   647
evaluate: expression in: frame
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   648
    "Evaluates passed `expression` (in target language). If
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   649
     `frame` (as `GDBFrame`) is given, evaluate expression in
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   650
     context of that `frame`.
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   651
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   652
     Returns the result as `GDBVariableObject`,"
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   653
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   654
    | result varobj |
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   655
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   656
    frame notNil ifTrue:[
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   657
        result := self send: (GDBMI_var_create new arguments: (Array with: '--thread' with: frame thread id with: '--frame' with: frame level with: '-' with: '*' with: expression)).
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   658
    ] ifFalse:[
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   659
        result := self send: (GDBMI_var_create new arguments: (Array with: '-' with: '*' with: expression)).
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   660
    ].
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   661
    varobj := result value.
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   662
    varobj 
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   663
        setDebugger: self; 
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   664
        setExpression: expression;
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   665
        setFrame: frame;
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   666
        registerForFinalization. 
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   667
    ^ varobj
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   668
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   669
    "Created: / 13-02-2018 / 22:21:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   670
    "Modified (format): / 20-03-2018 / 22:55:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   671
!
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   672
82
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   673
executable: aStringOrFilename
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   674
    "Sets the executable to debug. 
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   675
     API equivalent to CLI command:
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   676
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   677
        (gdb) exec-file <aStringOrFilename>
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   678
    "
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   679
    self executable: aStringOrFilename arguments: nil
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   680
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   681
    "Created: / 28-02-2015 / 00:19:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   682
    "Modified: / 05-06-2017 / 17:06:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   683
!
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   684
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   685
executable: aStringOrFilename arguments: anArray"of String"
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   686
    "Sets the executable to debug and argument to pass to it.
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   687
     API equivalent to CLI command:
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   688
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   689
        (gdb) exec-file <aStringOrFilename>   
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   690
        (gdb) set args <anArray>
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   691
    "
97
b17c889076e4 Added API for memory dumps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 96
diff changeset
   692
    self send:(GDBMI_file_exec_and_symbols arguments: (Array with: aStringOrFilename asString)).
82
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   693
    anArray notEmptyOrNil ifTrue:[ 
97
b17c889076e4 Added API for memory dumps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 96
diff changeset
   694
        self send: (GDBMI_exec_arguments arguments: anArray).
82
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   695
    ].
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   696
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   697
    "Created: / 05-06-2017 / 17:05:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
111
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   698
    "Modified: / 09-02-2018 / 09:44:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
104
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 102
diff changeset
   699
!
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 102
diff changeset
   700
169
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   701
getParameter:name 
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   702
    "Teturn the current value of a GDB parameter. 
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   703
     See `show` GDB command.
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   704
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   705
     Subscribe to `GDBCmdParamChangedEvent` to get notified
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   706
     when parameter value changes.
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   707
    "
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   708
    
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   709
    | result |
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   710
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   711
    result := self send:(GDBMI_gdb_show arguments:(Array with:name)).
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   712
    ^ result propertyAt:#value.
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   713
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   714
    "Created: / 19-01-2019 / 21:55:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   715
!
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   716
200
e9250da35d87 API: add method for importing Python support code
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 196
diff changeset
   717
pythonImport: module
e9250da35d87 API: add method for importing Python support code
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 196
diff changeset
   718
    "Import a Python module"
e9250da35d87 API: add method for importing Python support code
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 196
diff changeset
   719
e9250da35d87 API: add method for importing Python support code
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 196
diff changeset
   720
    self send: ('python import ', module )
e9250da35d87 API: add method for importing Python support code
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 196
diff changeset
   721
e9250da35d87 API: add method for importing Python support code
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 196
diff changeset
   722
    "Created: / 08-07-2019 / 11:22:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
e9250da35d87 API: add method for importing Python support code
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 196
diff changeset
   723
!
e9250da35d87 API: add method for importing Python support code
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 196
diff changeset
   724
e9250da35d87 API: add method for importing Python support code
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 196
diff changeset
   725
pythonSysPathAppend: directory
e9250da35d87 API: add method for importing Python support code
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 196
diff changeset
   726
    "Append given directory to Python's `sys.path` so modules found
e9250da35d87 API: add method for importing Python support code
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 196
diff changeset
   727
     there can be `import`ed."
e9250da35d87 API: add method for importing Python support code
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 196
diff changeset
   728
e9250da35d87 API: add method for importing Python support code
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 196
diff changeset
   729
    | dir |
e9250da35d87 API: add method for importing Python support code
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 196
diff changeset
   730
e9250da35d87 API: add method for importing Python support code
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 196
diff changeset
   731
    dir := directory asFilename.
e9250da35d87 API: add method for importing Python support code
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 196
diff changeset
   732
e9250da35d87 API: add method for importing Python support code
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 196
diff changeset
   733
    self assert: dir isDirectory.
e9250da35d87 API: add method for importing Python support code
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 196
diff changeset
   734
    self send: ('python import sys; sys.path.append("%1")' bindWith: (GDBMIPrinter cescaped: dir pathName))
e9250da35d87 API: add method for importing Python support code
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 196
diff changeset
   735
e9250da35d87 API: add method for importing Python support code
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 196
diff changeset
   736
    "Created: / 08-07-2019 / 11:21:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
e9250da35d87 API: add method for importing Python support code
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 196
diff changeset
   737
!
e9250da35d87 API: add method for importing Python support code
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 196
diff changeset
   738
229
6b2f7b5c8ce7 Refactor `GDBDebugger >> selectThread:` and `#selectFrame:`
Jan Vrany <jan.vrany@labware.com>
parents: 223
diff changeset
   739
selectFrame: aGDBFrame 
104
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 102
diff changeset
   740
    "
229
6b2f7b5c8ce7 Refactor `GDBDebugger >> selectThread:` and `#selectFrame:`
Jan Vrany <jan.vrany@labware.com>
parents: 223
diff changeset
   741
     Set the context frame to given frame. This frame is then
6b2f7b5c8ce7 Refactor `GDBDebugger >> selectThread:` and `#selectFrame:`
Jan Vrany <jan.vrany@labware.com>
parents: 223
diff changeset
   742
     the contex frame for other commands, like finish, info frame
6b2f7b5c8ce7 Refactor `GDBDebugger >> selectThread:` and `#selectFrame:`
Jan Vrany <jan.vrany@labware.com>
parents: 223
diff changeset
   743
     and so on."
6b2f7b5c8ce7 Refactor `GDBDebugger >> selectThread:` and `#selectFrame:`
Jan Vrany <jan.vrany@labware.com>
parents: 223
diff changeset
   744
6b2f7b5c8ce7 Refactor `GDBDebugger >> selectThread:` and `#selectFrame:`
Jan Vrany <jan.vrany@labware.com>
parents: 223
diff changeset
   745
    self selectThreadId: aGDBFrame thread id frameId: aGDBFrame level
104
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 102
diff changeset
   746
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 102
diff changeset
   747
    "Created: / 01-02-2018 / 22:27:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
229
6b2f7b5c8ce7 Refactor `GDBDebugger >> selectThread:` and `#selectFrame:`
Jan Vrany <jan.vrany@labware.com>
parents: 223
diff changeset
   748
    "Modified: / 17-05-2021 / 13:06:12 / Jan Vrany <jan.vrany@labware.com>"
104
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 102
diff changeset
   749
!
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 102
diff changeset
   750
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 102
diff changeset
   751
selectThread: aGDBThread
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 102
diff changeset
   752
    "
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 102
diff changeset
   753
    Set the context thread to given thread. This thread is then
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 102
diff changeset
   754
    the contex thread for other commands (if no thread id is given)
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 102
diff changeset
   755
    "
229
6b2f7b5c8ce7 Refactor `GDBDebugger >> selectThread:` and `#selectFrame:`
Jan Vrany <jan.vrany@labware.com>
parents: 223
diff changeset
   756
    self selectThreadId: aGDBThread id frameId: 0
104
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 102
diff changeset
   757
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 102
diff changeset
   758
    "Created: / 01-02-2018 / 22:25:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
229
6b2f7b5c8ce7 Refactor `GDBDebugger >> selectThread:` and `#selectFrame:`
Jan Vrany <jan.vrany@labware.com>
parents: 223
diff changeset
   759
    "Modified: / 17-05-2021 / 13:05:08 / Jan Vrany <jan.vrany@labware.com>"
6b2f7b5c8ce7 Refactor `GDBDebugger >> selectThread:` and `#selectFrame:`
Jan Vrany <jan.vrany@labware.com>
parents: 223
diff changeset
   760
!
6b2f7b5c8ce7 Refactor `GDBDebugger >> selectThread:` and `#selectFrame:`
Jan Vrany <jan.vrany@labware.com>
parents: 223
diff changeset
   761
6b2f7b5c8ce7 Refactor `GDBDebugger >> selectThread:` and `#selectFrame:`
Jan Vrany <jan.vrany@labware.com>
parents: 223
diff changeset
   762
selectThreadId: threadId frameId: frameId
6b2f7b5c8ce7 Refactor `GDBDebugger >> selectThread:` and `#selectFrame:`
Jan Vrany <jan.vrany@labware.com>
parents: 223
diff changeset
   763
    (selectedThread id ~= threadId or:[selectedFrame level ~= frameId]) ifTrue: [
6b2f7b5c8ce7 Refactor `GDBDebugger >> selectThread:` and `#selectFrame:`
Jan Vrany <jan.vrany@labware.com>
parents: 223
diff changeset
   764
        self send: (GDBMI_stack_select_frame new arguments: 
6b2f7b5c8ce7 Refactor `GDBDebugger >> selectThread:` and `#selectFrame:`
Jan Vrany <jan.vrany@labware.com>
parents: 223
diff changeset
   765
                        (Array with: '--thread' with: threadId
6b2f7b5c8ce7 Refactor `GDBDebugger >> selectThread:` and `#selectFrame:`
Jan Vrany <jan.vrany@labware.com>
parents: 223
diff changeset
   766
                               with: '--frame'  with: frameId
6b2f7b5c8ce7 Refactor `GDBDebugger >> selectThread:` and `#selectFrame:`
Jan Vrany <jan.vrany@labware.com>
parents: 223
diff changeset
   767
                               with: frameId))
6b2f7b5c8ce7 Refactor `GDBDebugger >> selectThread:` and `#selectFrame:`
Jan Vrany <jan.vrany@labware.com>
parents: 223
diff changeset
   768
           andWait: false
6b2f7b5c8ce7 Refactor `GDBDebugger >> selectThread:` and `#selectFrame:`
Jan Vrany <jan.vrany@labware.com>
parents: 223
diff changeset
   769
    ].
6b2f7b5c8ce7 Refactor `GDBDebugger >> selectThread:` and `#selectFrame:`
Jan Vrany <jan.vrany@labware.com>
parents: 223
diff changeset
   770
6b2f7b5c8ce7 Refactor `GDBDebugger >> selectThread:` and `#selectFrame:`
Jan Vrany <jan.vrany@labware.com>
parents: 223
diff changeset
   771
    "Created: / 17-05-2021 / 13:05:34 / Jan Vrany <jan.vrany@labware.com>"
128
8d7c075a06b9 API: added GDBDebugger >> #targetConnect:parameters:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 126
diff changeset
   772
!
8d7c075a06b9 API: added GDBDebugger >> #targetConnect:parameters:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 126
diff changeset
   773
169
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   774
setParameter:name to:value 
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   775
    "Set an internal GDB parameter named `name` to `value`.
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   776
     See `set` GDB command.
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   777
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   778
     Subscribe to `GDBCmdParamChangedEvent` to get notified
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   779
     when parameter value changes.
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   780
    "
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   781
    
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   782
    self assert:value isString.
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   783
    self send:(GDBMI_gdb_set arguments:(Array with:name with:value)).
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   784
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   785
    "Created: / 19-01-2019 / 21:56:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   786
!
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   787
128
8d7c075a06b9 API: added GDBDebugger >> #targetConnect:parameters:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 126
diff changeset
   788
targetConnect: type parameters: parameters
8d7c075a06b9 API: added GDBDebugger >> #targetConnect:parameters:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 126
diff changeset
   789
    "Connect to the remote target. `type` is the type of target, 
8d7c075a06b9 API: added GDBDebugger >> #targetConnect:parameters:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 126
diff changeset
   790
     for instance ‘extended-remote=’. `parameters` are device names, 
8d7c075a06b9 API: added GDBDebugger >> #targetConnect:parameters:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 126
diff changeset
   791
     host names and the like.
8d7c075a06b9 API: added GDBDebugger >> #targetConnect:parameters:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 126
diff changeset
   792
8d7c075a06b9 API: added GDBDebugger >> #targetConnect:parameters:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 126
diff changeset
   793
     See https://sourceware.org/gdb/onlinedocs/gdb/Target-Commands.html#Target-Commands
8d7c075a06b9 API: added GDBDebugger >> #targetConnect:parameters:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 126
diff changeset
   794
    "
8d7c075a06b9 API: added GDBDebugger >> #targetConnect:parameters:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 126
diff changeset
   795
    self send:(GDBMI_target_select arguments:(Array with: type) , parameters).
8d7c075a06b9 API: added GDBDebugger >> #targetConnect:parameters:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 126
diff changeset
   796
8d7c075a06b9 API: added GDBDebugger >> #targetConnect:parameters:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 126
diff changeset
   797
    "Created: / 26-07-2018 / 21:45:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
82
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   798
! !
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   799
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   800
!GDBDebugger methodsFor:'evaluating'!
64
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   801
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   802
do: block andWaitFor:eventHandlers
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   803
    "Evaluates a given block and then wait for events.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   804
     `eventHandlers`. 
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   805
     Params:
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   806
     `block`        block to evaluate
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   807
     `eventHandler` may be either nil or event class or one arg block or collection
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   808
                    of event classes or blocks.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   809
                    - If nil then do not wait for anything (use nil for async send)
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   810
                    - If event class, then wait for an event of that class. Note, that
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   811
                      subclasses are handled too.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   812
                    - If block, then wait for an event for which the block returns true.
82
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   813
                    - If collection, then wait for a sequence of events, each matched as above.
64
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   814
     Returns:       a matching event or events (in case a collection of handlers has been passed)"
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   815
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   816
    ^ self do: block andWaitFor: eventHandlers withTimeoutMs: nil
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   817
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   818
    "Created: / 08-03-2015 / 07:30:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
82
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   819
    "Modified (comment): / 12-06-2017 / 09:31:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
64
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   820
!
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   821
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   822
do: block andWaitFor:eventHandlers withTimeoutMs:timeout 
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   823
    "Evaluates a given block and then wait for events.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   824
     `eventHandlers`. Raise a TimeoutError if expected events don't arrive
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   825
     in specified time.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   826
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   827
     Params:
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   828
     `block`        block to evaluate
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   829
     `eventHandler` may be either nil or event class or one arg block or collection
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   830
                    of event classes or blocks.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   831
                    - If nil then do not wait for anything (use nil for async send)
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   832
                    - If event class, then wait for an event of that class. Note, that
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   833
                      subclasses are handled too.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   834
                    - If block, then wait for an event for which the block returns true.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   835
                    - If collectio, then wait for a sequence of events, each matched as above.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   836
     `timeout`       wait at most that much milliseconds, throw TimeoutError otherwise. If `timeout` == mil
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   837
                    then wait for indefinitly
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   838
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   839
     Returns:       a matching event or events (in case a collection of handlers has been passes)"
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   840
    
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   841
    | handlersArray handlerFinal eventsArray blocker |
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   842
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   843
    eventHandlers isNil ifTrue:[
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   844
        "/ Asynchronous send...
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   845
        self assert:timeout isNil.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   846
        block value.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   847
        ^ nil
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   848
    ].
148
9fb679577cac Forbid blocking calls to `#send:andWait:` and: `send:andWaitFor:withTimeoutMs` from within an event dispatcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 144
diff changeset
   849
    self 
9fb679577cac Forbid blocking calls to `#send:andWait:` and: `send:andWaitFor:withTimeoutMs` from within an event dispatcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 144
diff changeset
   850
        assert:Processor activeProcess ~~ connection eventDispatchProcess
9fb679577cac Forbid blocking calls to `#send:andWait:` and: `send:andWaitFor:withTimeoutMs` from within an event dispatcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 144
diff changeset
   851
        message:'Cannot send commands from within event dispatching process. Would deadlock'.            
64
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   852
    eventHandlers isCollection 
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   853
        ifTrue:[ handlersArray := eventHandlers ]
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   854
        ifFalse:[ handlersArray := Array with:eventHandlers ].
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   855
    eventsArray := Array new:handlersArray size.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   856
    1 to:handlersArray size do:[:i | 
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   857
        | handler |
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   858
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   859
        handler := handlersArray at:i.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   860
        handlersArray at:i
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   861
            put:[:event | 
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   862
                | matches |
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   863
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   864
                matches := handler isBlock ifTrue:[ handler value:event ] ifFalse:[ event isKindOf:handler ].
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   865
                (matches and:[ i == 1 or:[ (eventsArray at:i - 1) notNil ] ]) ifTrue:[
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   866
                    eventsArray at:i put:event.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   867
                    self announcer unsubscribe:(handlersArray at:i).
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   868
                    i == handlersArray size ifTrue:[
235
51f916ee4111 Renamed `GDBEventSet` to `GDBEventSequence`
Jan Vrany <jan.vrany@labware.com>
parents: 231
diff changeset
   869
                        connection eventAnnouncerInternal when: GDBEventSequenceProcessingFinished do: handlerFinal.
64
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   870
                    ].
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   871
                ].
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   872
            ].
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   873
        self announcer when:GDBEvent do:(handlersArray at:i).
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   874
    ].
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   875
    handlerFinal := [ :event | connection eventAnnouncerInternal unsubscribe: handlerFinal. blocker signal ].  
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   876
    blocker := Semaphore new.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   877
    block value.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   878
    [
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   879
        (blocker waitWithTimeoutMs:timeout) isNil ifTrue:[
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   880
            eventsArray := nil.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   881
        ].
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   882
    ] ensure:[
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   883
        handlersArray do:[:handler | 
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   884
            handler notNil ifTrue:[
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   885
                self announcer unsubscribe:handler
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   886
            ]
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   887
        ].
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   888
    ].
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   889
    eventsArray isNil ifTrue:[
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   890
        (TimeoutError newException)
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   891
            parameter:timeout;
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   892
            raise.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   893
    ].
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   894
    ^ eventHandlers isCollection ifTrue:[ eventsArray ] ifFalse:[ eventsArray first ]
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   895
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   896
    "Created: / 08-03-2015 / 07:28:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
218
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 144
diff changeset
   897
    "Modified: / 02-10-2018 / 14:26:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
148
9fb679577cac Forbid blocking calls to `#send:andWait:` and: `send:andWaitFor:withTimeoutMs` from within an event dispatcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 144
diff changeset
   898
    "Modified (format): / 03-10-2018 / 12:58:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
235
51f916ee4111 Renamed `GDBEventSet` to `GDBEventSequence`
Jan Vrany <jan.vrany@labware.com>
parents: 231
diff changeset
   899
    "Modified: / 06-09-2021 / 15:01:14 / Jan Vrany <jan.vrany@labware.com>"
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   900
! !
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   901
21
83395ca8b257 Renamed GDB to GDBDebugger
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   902
!GDBDebugger methodsFor:'event handling'!
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   903
87
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   904
onBreakpointCreatedEvent: aGDBBreakpointCreatedEvent
120
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   905
    | breakpoint |
87
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   906
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   907
    breakpoints isNil ifTrue:[ 
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   908
        breakpoints := List new.
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   909
    ].
120
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   910
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   911
    "/ Care for breakpoints with multiple locations. 
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   912
    "/ 
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   913
    "/.If the breakpoint created has multiple locations,
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   914
    "/ the breakppints contains an instance of GDBBreakpoint
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   915
    "/ for the top-level breakpoint, followed by a GDBBreakpoint
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   916
    "/ for each location.
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   917
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   918
    breakpoint := aGDBBreakpointCreatedEvent breakpoints first.
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   919
    aGDBBreakpointCreatedEvent breakpoints size > 1 ifTrue:[ 
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   920
        breakpoint locations: (aGDBBreakpointCreatedEvent breakpoints copyFrom: 2)
89
ba62d486014f Initial support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 88
diff changeset
   921
    ].
120
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   922
    breakpoint setDebugger: self.    
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   923
    breakpoints add: breakpoint.
87
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   924
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   925
    "Created: / 06-07-2017 / 16:08:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
120
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   926
    "Modified: / 18-05-2018 / 14:59:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
87
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   927
!
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   928
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   929
onBreakpointDeletedEvent: aGDBBreakpointDeletedEvent
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   930
    | breakpoint |
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   931
120
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   932
    breakpoint := self breakpointForId: aGDBBreakpointDeletedEvent id.
87
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   933
    breakpoint setDebugger: nil.
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   934
    breakpoints remove: breakpoint.
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   935
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   936
    "Created: / 06-07-2017 / 16:26:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
120
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   937
    "Modified: / 18-05-2018 / 14:58:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
87
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   938
!
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   939
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   940
onBreakpointModifiedEvent: aGDBBreakpointModifiedEvent
89
ba62d486014f Initial support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 88
diff changeset
   941
    aGDBBreakpointModifiedEvent breakpoints do:[:new | 
ba62d486014f Initial support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 88
diff changeset
   942
        | old |    
87
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   943
175
a04e1a36e888 Fix for multi-location breakpoints created initially as pending
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   944
        old := self breakpointForId: new number ifAbsent:[ nil ].
231
dcadeaddd0c8 Update (internal) list of breakpoints when creating / modifying / deleting using MI commands
Jan Vrany <jan.vrany@labware.com>
parents: 229
diff changeset
   945
        old ~~ new ifTrue:[
dcadeaddd0c8 Update (internal) list of breakpoints when creating / modifying / deleting using MI commands
Jan Vrany <jan.vrany@labware.com>
parents: 229
diff changeset
   946
            old notNil ifTrue:[
dcadeaddd0c8 Update (internal) list of breakpoints when creating / modifying / deleting using MI commands
Jan Vrany <jan.vrany@labware.com>
parents: 229
diff changeset
   947
                old updateFrom: new.
dcadeaddd0c8 Update (internal) list of breakpoints when creating / modifying / deleting using MI commands
Jan Vrany <jan.vrany@labware.com>
parents: 229
diff changeset
   948
            ] ifFalse:[ 
dcadeaddd0c8 Update (internal) list of breakpoints when creating / modifying / deleting using MI commands
Jan Vrany <jan.vrany@labware.com>
parents: 229
diff changeset
   949
                "/ Care for breakpoints with multiple locations. 
dcadeaddd0c8 Update (internal) list of breakpoints when creating / modifying / deleting using MI commands
Jan Vrany <jan.vrany@labware.com>
parents: 229
diff changeset
   950
                "/ 
dcadeaddd0c8 Update (internal) list of breakpoints when creating / modifying / deleting using MI commands
Jan Vrany <jan.vrany@labware.com>
parents: 229
diff changeset
   951
                "/.If the breakpoint has been created as pending breakpoint
dcadeaddd0c8 Update (internal) list of breakpoints when creating / modifying / deleting using MI commands
Jan Vrany <jan.vrany@labware.com>
parents: 229
diff changeset
   952
                "/ it is unknown whether it is a multi-location breakpoint or not
dcadeaddd0c8 Update (internal) list of breakpoints when creating / modifying / deleting using MI commands
Jan Vrany <jan.vrany@labware.com>
parents: 229
diff changeset
   953
                "/ so it has no locations.
dcadeaddd0c8 Update (internal) list of breakpoints when creating / modifying / deleting using MI commands
Jan Vrany <jan.vrany@labware.com>
parents: 229
diff changeset
   954
                "/ 
dcadeaddd0c8 Update (internal) list of breakpoints when creating / modifying / deleting using MI commands
Jan Vrany <jan.vrany@labware.com>
parents: 229
diff changeset
   955
                "/ If, once the object is loaded abd breakpoint can be installed,
dcadeaddd0c8 Update (internal) list of breakpoints when creating / modifying / deleting using MI commands
Jan Vrany <jan.vrany@labware.com>
parents: 229
diff changeset
   956
                "/ it turns out there are multiple locations, we get an an
dcadeaddd0c8 Update (internal) list of breakpoints when creating / modifying / deleting using MI commands
Jan Vrany <jan.vrany@labware.com>
parents: 229
diff changeset
   957
                "/ =breakpoint-modified event listing all locations.
dcadeaddd0c8 Update (internal) list of breakpoints when creating / modifying / deleting using MI commands
Jan Vrany <jan.vrany@labware.com>
parents: 229
diff changeset
   958
                "/ 
dcadeaddd0c8 Update (internal) list of breakpoints when creating / modifying / deleting using MI commands
Jan Vrany <jan.vrany@labware.com>
parents: 229
diff changeset
   959
                "/ Therefore, we have to update existing breakpoint and add 
dcadeaddd0c8 Update (internal) list of breakpoints when creating / modifying / deleting using MI commands
Jan Vrany <jan.vrany@labware.com>
parents: 229
diff changeset
   960
                "/ locations.
175
a04e1a36e888 Fix for multi-location breakpoints created initially as pending
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   961
231
dcadeaddd0c8 Update (internal) list of breakpoints when creating / modifying / deleting using MI commands
Jan Vrany <jan.vrany@labware.com>
parents: 229
diff changeset
   962
                | dot |
175
a04e1a36e888 Fix for multi-location breakpoints created initially as pending
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   963
231
dcadeaddd0c8 Update (internal) list of breakpoints when creating / modifying / deleting using MI commands
Jan Vrany <jan.vrany@labware.com>
parents: 229
diff changeset
   964
                "/ First, check if it is a 'location':
dcadeaddd0c8 Update (internal) list of breakpoints when creating / modifying / deleting using MI commands
Jan Vrany <jan.vrany@labware.com>
parents: 229
diff changeset
   965
                dot := new number indexOf: $..
dcadeaddd0c8 Update (internal) list of breakpoints when creating / modifying / deleting using MI commands
Jan Vrany <jan.vrany@labware.com>
parents: 229
diff changeset
   966
                dot ~~ 0 ifTrue:[ 
dcadeaddd0c8 Update (internal) list of breakpoints when creating / modifying / deleting using MI commands
Jan Vrany <jan.vrany@labware.com>
parents: 229
diff changeset
   967
                    | bpt |    
175
a04e1a36e888 Fix for multi-location breakpoints created initially as pending
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   968
231
dcadeaddd0c8 Update (internal) list of breakpoints when creating / modifying / deleting using MI commands
Jan Vrany <jan.vrany@labware.com>
parents: 229
diff changeset
   969
                    bpt := self breakpointForId: (new number copyTo: dot - 1).
dcadeaddd0c8 Update (internal) list of breakpoints when creating / modifying / deleting using MI commands
Jan Vrany <jan.vrany@labware.com>
parents: 229
diff changeset
   970
                    "/ See GDBBreakpoint >> locations...
dcadeaddd0c8 Update (internal) list of breakpoints when creating / modifying / deleting using MI commands
Jan Vrany <jan.vrany@labware.com>
parents: 229
diff changeset
   971
                    (bpt locations includes: bpt) ifTrue:[ 
dcadeaddd0c8 Update (internal) list of breakpoints when creating / modifying / deleting using MI commands
Jan Vrany <jan.vrany@labware.com>
parents: 229
diff changeset
   972
                        bpt locations: (Array with: new)
dcadeaddd0c8 Update (internal) list of breakpoints when creating / modifying / deleting using MI commands
Jan Vrany <jan.vrany@labware.com>
parents: 229
diff changeset
   973
                    ] ifFalse:[ 
dcadeaddd0c8 Update (internal) list of breakpoints when creating / modifying / deleting using MI commands
Jan Vrany <jan.vrany@labware.com>
parents: 229
diff changeset
   974
                        bpt locations: (bpt locations copyWith: new)
dcadeaddd0c8 Update (internal) list of breakpoints when creating / modifying / deleting using MI commands
Jan Vrany <jan.vrany@labware.com>
parents: 229
diff changeset
   975
                    ].
175
a04e1a36e888 Fix for multi-location breakpoints created initially as pending
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   976
                ].
a04e1a36e888 Fix for multi-location breakpoints created initially as pending
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   977
            ].
a04e1a36e888 Fix for multi-location breakpoints created initially as pending
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   978
        ].
89
ba62d486014f Initial support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 88
diff changeset
   979
    ].
87
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   980
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   981
    "Created: / 06-07-2017 / 16:28:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
95
f417138e9c48 Win32: initial support for Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 93
diff changeset
   982
    "Modified: / 15-01-2018 / 23:11:52 / jv"
175
a04e1a36e888 Fix for multi-location breakpoints created initially as pending
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   983
    "Modified: / 07-02-2019 / 15:14:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
231
dcadeaddd0c8 Update (internal) list of breakpoints when creating / modifying / deleting using MI commands
Jan Vrany <jan.vrany@labware.com>
parents: 229
diff changeset
   984
    "Modified: / 22-05-2021 / 16:33:26 / Jan Vrany <jan.vrany@labware.com>"
87
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   985
!
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   986
114
be5bdaecb9b3 API: added methods for querying source directories
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
   987
onCmdParamChangedEvent: aGDBCmdParamChangedEvent
be5bdaecb9b3 API: added methods for querying source directories
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
   988
    (aGDBCmdParamChangedEvent name = 'directories') ifTrue:[ 
be5bdaecb9b3 API: added methods for querying source directories
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
   989
        directories := nil.
be5bdaecb9b3 API: added methods for querying source directories
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
   990
    ].
be5bdaecb9b3 API: added methods for querying source directories
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
   991
be5bdaecb9b3 API: added methods for querying source directories
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
   992
    "Created: / 09-03-2018 / 12:12:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
be5bdaecb9b3 API: added methods for querying source directories
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
   993
!
be5bdaecb9b3 API: added methods for querying source directories
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
   994
222
2c06fc7c39f5 Add command pre-execute and post-executehook
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   995
onCommandEvent:aGDBCommandEvent
2c06fc7c39f5 Add command pre-execute and post-executehook
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   996
    | command |
2c06fc7c39f5 Add command pre-execute and post-executehook
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   997
    command := aGDBCommandEvent command.
2c06fc7c39f5 Add command pre-execute and post-executehook
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   998
    command notNil ifTrue: [
2c06fc7c39f5 Add command pre-execute and post-executehook
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   999
        command preExecuteIn: self.
2c06fc7c39f5 Add command pre-execute and post-executehook
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
  1000
    ].
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1001
    connection send:aGDBCommandEvent command.
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1002
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1003
    "Created: / 02-06-2014 / 23:38:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1004
    "Modified: / 20-06-2014 / 22:09:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
222
2c06fc7c39f5 Add command pre-execute and post-executehook
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
  1005
    "Modified: / 10-03-2021 / 13:25:32 / Jan Vrany <jan.vrany@labware.com>"
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1006
!
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1007
222
2c06fc7c39f5 Add command pre-execute and post-executehook
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
  1008
onCommandResultEvent: aGDBCommandResultEvent 
2c06fc7c39f5 Add command pre-execute and post-executehook
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
  1009
    | result  command |
169
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
  1010
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
  1011
    result := aGDBCommandResultEvent result.
222
2c06fc7c39f5 Add command pre-execute and post-executehook
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
  1012
    command := result command.
2c06fc7c39f5 Add command pre-execute and post-executehook
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
  1013
    command notNil ifTrue: [
2c06fc7c39f5 Add command pre-execute and post-executehook
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
  1014
        command postExecuteIn: self result: aGDBCommandResultEvent result.
2c06fc7c39f5 Add command pre-execute and post-executehook
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
  1015
    ]
169
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
  1016
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
  1017
    "Created: / 19-01-2019 / 22:35:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
  1018
    "Modified: / 21-01-2019 / 17:53:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
223
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
  1019
    "Modified: / 09-03-2021 / 13:44:07 / Jan Vrany <jan.vrany@labware.com>"
169
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
  1020
!
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
  1021
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1022
onExitEvent:aGDBExitEvent 
8
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
  1023
    self release.
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
  1024
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
  1025
    "Created: / 03-06-2014 / 00:36:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
9
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
  1026
    "Modified: / 04-06-2014 / 09:28:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
35
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
  1027
!
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
  1028
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1029
onRunningEvent: aGDBRunningEvent
38
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1030
    | threads threadId |
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1031
72
eb4eea3ebf4c Increate sequence number also when thread or thread group is stopped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
  1032
    self nextInferiorStateSequnceNumber.        
38
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1033
    threadId := aGDBRunningEvent threadId.
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1034
    threadId = 'all' ifFalse:[ 
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1035
        threadId := threadId asInteger.
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1036
    ].
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1037
    threads := Set new.
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1038
    inferiors do:[:inferior | 
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1039
        inferior threads do:[:thread | 
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1040
            (threadId isString or:[thread id = threadId]) ifTrue:[ 
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1041
                threads add: thread.
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1042
            ].
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1043
        ].
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1044
    ].
86
7f53d51a0a65 Cache thread status and update it on `=stopped` and `=running` events
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
  1045
    aGDBRunningEvent setThreads: threads.
7f53d51a0a65 Cache thread status and update it on `=stopped` and `=running` events
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
  1046
    threads do:[:thread | 
7f53d51a0a65 Cache thread status and update it on `=stopped` and `=running` events
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
  1047
        thread onRunningEvent: aGDBRunningEvent.
7f53d51a0a65 Cache thread status and update it on `=stopped` and `=running` events
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
  1048
    ].
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1049
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1050
    "Created: / 07-09-2014 / 23:34:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
86
7f53d51a0a65 Cache thread status and update it on `=stopped` and `=running` events
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
  1051
    "Modified: / 12-07-2017 / 13:48:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1052
!
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1053
38
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1054
onStoppedEvent: aGDBStoppedEvent
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1055
    | threads threadIds |
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1056
72
eb4eea3ebf4c Increate sequence number also when thread or thread group is stopped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
  1057
    self nextInferiorStateSequnceNumber.  
38
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1058
    threadIds := aGDBStoppedEvent stoppedThreadIds.
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1059
    threadIds = 'all' ifFalse:[ 
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1060
        threadIds := threadIds collect:[:e | e asInteger ].
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1061
    ].
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1062
    threads := Set new.
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1063
    inferiors do:[:inferior | 
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1064
        inferior threads do:[:thread | 
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1065
            (threadIds isString or:[threadIds includes: thread id]) ifTrue:[ 
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1066
                threads add: thread.
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1067
            ].
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1068
        ].
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1069
    ].
86
7f53d51a0a65 Cache thread status and update it on `=stopped` and `=running` events
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
  1070
    aGDBStoppedEvent setThreads: threads.
7f53d51a0a65 Cache thread status and update it on `=stopped` and `=running` events
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
  1071
    threads do:[:thread | 
7f53d51a0a65 Cache thread status and update it on `=stopped` and `=running` events
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
  1072
        thread onStoppedEvent: aGDBStoppedEvent.
7f53d51a0a65 Cache thread status and update it on `=stopped` and `=running` events
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
  1073
    ].
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1074
116
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1075
    "/ Initialize target features properly
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1076
    targetFeatures isNil ifTrue:[
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1077
        self send: GDBMI_list_target_features new 
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1078
             andWithResultDo:[ :result | targetFeatures := result propertyAt: #features ].
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1079
    ].
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1080
223
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
  1081
    self selectedThread: aGDBStoppedEvent stoppedThread frame: aGDBStoppedEvent frame
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
  1082
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1083
    "Created: / 07-09-2014 / 23:34:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
116
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1084
    "Modified: / 09-04-2018 / 15:42:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
223
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
  1085
    "Modified: / 09-03-2021 / 14:57:36 / Jan Vrany <jan.vrany@labware.com>"
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1086
!
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1087
172
836209352efb Update target features from `=target-connected event`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 170
diff changeset
  1088
onTargetConnectedEvent: aGDBTargetConnectedEvent
836209352efb Update target features from `=target-connected event`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 170
diff changeset
  1089
    targetFeatures := aGDBTargetConnectedEvent features
836209352efb Update target features from `=target-connected event`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 170
diff changeset
  1090
836209352efb Update target features from `=target-connected event`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 170
diff changeset
  1091
    "Created: / 22-01-2019 / 13:44:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
836209352efb Update target features from `=target-connected event`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 170
diff changeset
  1092
!
836209352efb Update target features from `=target-connected event`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 170
diff changeset
  1093
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1094
onThreadCreatedEvent:aGDBThreadCreatedEvent 
36
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
  1095
    | inferior |
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
  1096
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1097
    inferior := self inferiorForId:aGDBThreadCreatedEvent threadGroupId.
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1098
    inferior onThreadCreatedEvent:aGDBThreadCreatedEvent.
36
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
  1099
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
  1100
    "Created: / 07-09-2014 / 21:20:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
  1101
!
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
  1102
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1103
onThreadExitedEvent:aGDBThreadExitedEvent 
36
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
  1104
    | inferior |
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
  1105
72
eb4eea3ebf4c Increate sequence number also when thread or thread group is stopped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
  1106
    self nextInferiorStateSequnceNumber.  
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1107
    inferior := self inferiorForId:aGDBThreadExitedEvent threadGroupId.
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1108
    inferior onThreadExitedEvent:aGDBThreadExitedEvent.
36
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
  1109
116
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1110
    "/ reset target features
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1111
    targetFeatures := nil.
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1112
36
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
  1113
    "Created: / 07-09-2014 / 21:20:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
116
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1114
    "Modified: / 09-04-2018 / 15:42:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
36
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
  1115
!
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
  1116
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1117
onThreadGroupAddedEvent:aGDBThreadGroupAddedEvent 
35
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
  1118
    | inferior |
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1119
35
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
  1120
    inferiors isNil ifTrue:[
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
  1121
        inferiors := List new.
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
  1122
    ].
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1123
    inferior := GDBThreadGroup newWithDebugger:self
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1124
            id:aGDBThreadGroupAddedEvent threadGroupId.
35
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
  1125
    inferiors add:inferior.
116
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1126
    aGDBThreadGroupAddedEvent setThreadGroup:inferior.
35
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
  1127
116
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1128
    "Modified: / 26-03-2018 / 21:46:51 / jv"
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1129
    "Modified: / 09-04-2018 / 15:36:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
35
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
  1130
!
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
  1131
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1132
onThreadGroupExitedEvent:aGDBThreadGroupExitedEvent 
35
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
  1133
    | inferior |
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
  1134
72
eb4eea3ebf4c Increate sequence number also when thread or thread group is stopped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
  1135
    self nextInferiorStateSequnceNumber.        
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1136
    inferior := self inferiorForId:aGDBThreadGroupExitedEvent threadGroupId.
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1137
    inferior setExitCode:aGDBThreadGroupExitedEvent exitCode.
223
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
  1138
    aGDBThreadGroupExitedEvent setThreadGroup:inferior.
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
  1139
    self selectedThread: nil frame: nil.
35
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
  1140
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
  1141
    "Created: / 06-09-2014 / 02:37:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
72
eb4eea3ebf4c Increate sequence number also when thread or thread group is stopped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
  1142
    "Modified: / 18-03-2015 / 13:57:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
223
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
  1143
    "Modified: / 09-03-2021 / 14:56:26 / Jan Vrany <jan.vrany@labware.com>"
35
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
  1144
!
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
  1145
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1146
onThreadGroupStartedEvent:aGDBThreadGroupStartedEvent 
35
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
  1147
    | inferior |
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
  1148
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1149
    inferior := self inferiorForId:aGDBThreadGroupStartedEvent threadGroupId.
144
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 129
diff changeset
  1150
    inferior reset.
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1151
    inferior setPid:aGDBThreadGroupStartedEvent pid.
111
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1152
    aGDBThreadGroupStartedEvent setThreadGroup:inferior.
35
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
  1153
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
  1154
    "Created: / 06-09-2014 / 02:37:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
116
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1155
    "Modified: / 26-03-2018 / 21:33:11 / jv"
144
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 129
diff changeset
  1156
    "Modified: / 26-09-2018 / 10:57:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
129
661e16236c67 Set `GDBThreadSelectedEvent`'s thread and frame
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 128
diff changeset
  1157
!
661e16236c67 Set `GDBThreadSelectedEvent`'s thread and frame
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 128
diff changeset
  1158
661e16236c67 Set `GDBThreadSelectedEvent`'s thread and frame
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 128
diff changeset
  1159
onThreadSelectedEvent: aGDBThreadSelectedEvent 
220
372b64967435 Minor cleanup of handling of `=thread-selected` event
Jan Vrany <jan.vrany@labware.com>
parents: 219
diff changeset
  1160
    | thread |
129
661e16236c67 Set `GDBThreadSelectedEvent`'s thread and frame
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 128
diff changeset
  1161
220
372b64967435 Minor cleanup of handling of `=thread-selected` event
Jan Vrany <jan.vrany@labware.com>
parents: 219
diff changeset
  1162
    thread := self threadForId: aGDBThreadSelectedEvent threadId.
372b64967435 Minor cleanup of handling of `=thread-selected` event
Jan Vrany <jan.vrany@labware.com>
parents: 219
diff changeset
  1163
    thread onThreadSelectedEvent:aGDBThreadSelectedEvent.
129
661e16236c67 Set `GDBThreadSelectedEvent`'s thread and frame
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 128
diff changeset
  1164
223
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
  1165
    self selectedThread: aGDBThreadSelectedEvent thread frame: aGDBThreadSelectedEvent frame
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
  1166
129
661e16236c67 Set `GDBThreadSelectedEvent`'s thread and frame
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 128
diff changeset
  1167
    "Created: / 29-07-2018 / 22:20:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
223
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
  1168
    "Modified: / 09-03-2021 / 14:55:33 / Jan Vrany <jan.vrany@labware.com>"
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
  1169
! !
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
  1170
21
83395ca8b257 Renamed GDB to GDBDebugger
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
  1171
!GDBDebugger methodsFor:'finalization'!
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1172
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1173
finalize
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1174
    self release.
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1175
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1176
    "Created: / 26-05-2014 / 21:23:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1177
! !
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1178
21
83395ca8b257 Renamed GDB to GDBDebugger
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
  1179
!GDBDebugger methodsFor:'initialize & release'!
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1180
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1181
initializeWithProcess: aGDBProcess
116
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1182
    | result |
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1183
1
da21f8614c2d Fixes in GDBLauncher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
  1184
    self registerForFinalization.
102
d573a3b2abe2 Variable objects: delete var. objects that are no longer needed
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 97
diff changeset
  1185
d573a3b2abe2 Variable objects: delete var. objects that are no longer needed
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 97
diff changeset
  1186
    finalizationRegistry := Registry new.
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1187
    connection := GDBConnection newWithProcess: aGDBProcess.
221
e7a1196c0c41 Make `GDBEvent` to hold on `GDBDebugger` that 'generated" that event
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
  1188
    connection setDebugger: self.
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1189
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
  1190
    commandSequenceNumber := 0.
19
c48d33e27d34 Added internal announcer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 12
diff changeset
  1191
    inferiorStateSequenceNumber := 0.
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
  1192
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1193
    self subscribe.        
8
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
  1194
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1195
    connection eventPumpStart.
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1196
    connection eventDispatchStart.
25
58e042a191a9 More work on GDB session recorder.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23
diff changeset
  1197
    Delay waitForMilliseconds:100.  
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
  1198
95
f417138e9c48 Win32: initial support for Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 93
diff changeset
  1199
    connection inferiorPTY notNil ifTrue:[
f417138e9c48 Win32: initial support for Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 93
diff changeset
  1200
        self send: (GDBMI_inferior_tty_set arguments: (Array with: connection inferiorPTY name)).
f417138e9c48 Win32: initial support for Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 93
diff changeset
  1201
    ].
217
011d65a54cc5 Backed out changeset 0509fe9ad879
Jan Vrany <jan.vrany@labware.com>
parents: 200
diff changeset
  1202
    self send: (GDBMI_gdb_set arguments: #('mi-async' 'on')).
11
474fbb650afe PTY support refactored to use GDBPTY object.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10
diff changeset
  1203
116
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1204
    result := self send: GDBMI_list_features new.
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1205
    debuggerFeatures := result propertyAt: #features.
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1206
    targetFeatures := nil.
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1207
82
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
  1208
    prettyPrintingEnabled := false.
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
  1209
    frameFiltersEnabled := false.
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
  1210
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1211
    "Created: / 20-06-2014 / 21:45:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
116
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1212
    "Modified: / 26-03-2018 / 21:36:31 / jv"
217
011d65a54cc5 Backed out changeset 0509fe9ad879
Jan Vrany <jan.vrany@labware.com>
parents: 200
diff changeset
  1213
    "Modified: / 28-01-2019 / 15:45:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
221
e7a1196c0c41 Make `GDBEvent` to hold on `GDBDebugger` that 'generated" that event
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
  1214
    "Modified: / 09-03-2021 / 11:13:09 / Jan Vrany <jan.vrany@labware.com>"
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1215
!
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1216
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1217
release
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1218
    connection notNil ifTrue:[ 
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1219
        self unsubscribe.
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1220
        connection release.
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1221
        connection := nil.
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1222
    ].
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1223
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1224
    "Created: / 26-05-2014 / 21:24:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1225
    "Modified: / 20-06-2014 / 22:08:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1226
!
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1227
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1228
subscribe
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1229
    connection eventAnnouncerInternal
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1230
        when: GDBCommandEvent               send: #onCommandEvent:           to: self;
169
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
  1231
        when: GDBCommandResultEvent         send: #onCommandResultEvent:     to: self;
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1232
        when: GDBExitEvent                  send: #onExitEvent:              to: self;
35
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
  1233
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1234
        when: GDBThreadGroupAddedEvent      send: #onThreadGroupAddedEvent:  to: self;
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1235
        when: GDBThreadGroupStartedEvent    send: #onThreadGroupStartedEvent: to: self;
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1236
        when: GDBThreadGroupExitedEvent     send: #onThreadGroupExitedEvent: to: self;
36
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
  1237
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1238
        when: GDBThreadCreatedEvent         send: #onThreadCreatedEvent:      to: self;
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1239
        when: GDBThreadExitedEvent          send: #onThreadExitedEvent:       to: self;
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1240
129
661e16236c67 Set `GDBThreadSelectedEvent`'s thread and frame
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 128
diff changeset
  1241
        when: GDBThreadSelectedEvent        send: #onThreadSelectedEvent:     to: self;
661e16236c67 Set `GDBThreadSelectedEvent`'s thread and frame
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 128
diff changeset
  1242
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1243
        when: GDBRunningEvent               send: #onRunningEvent:            to: self;
87
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
  1244
        when: GDBStoppedEvent               send: #onStoppedEvent:            to: self;
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
  1245
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
  1246
        when: GDBBreakpointCreatedEvent     send: #onBreakpointCreatedEvent:  to: self;
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
  1247
        when: GDBBreakpointModifiedEvent    send: #onBreakpointModifiedEvent: to: self;
114
be5bdaecb9b3 API: added methods for querying source directories
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
  1248
        when: GDBBreakpointDeletedEvent     send: #onBreakpointDeletedEvent:  to: self;
be5bdaecb9b3 API: added methods for querying source directories
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
  1249
172
836209352efb Update target features from `=target-connected event`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 170
diff changeset
  1250
        when: GDBCmdParamChangedEvent       send: #onCmdParamChangedEvent:    to: self;
836209352efb Update target features from `=target-connected event`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 170
diff changeset
  1251
836209352efb Update target features from `=target-connected event`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 170
diff changeset
  1252
        when: GDBTargetConnectedEvent       send: #onTargetConnectedEvent:    to: self.
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1253
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1254
    "Created: / 20-06-2014 / 22:07:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
172
836209352efb Update target features from `=target-connected event`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 170
diff changeset
  1255
    "Modified: / 22-01-2019 / 13:36:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1256
!
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1257
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1258
unsubscribe
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1259
    connection eventAnnouncerInternal unsubscribe: self
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1260
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1261
    "Created: / 20-06-2014 / 22:07:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1262
! !
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1263
113
c4f07d0e7b7a GNI/MI: added custom inspector view for viewing GDB/MI comminicatication trace
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
  1264
!GDBDebugger methodsFor:'inspecting'!
c4f07d0e7b7a GNI/MI: added custom inspector view for viewing GDB/MI comminicatication trace
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
  1265
c4f07d0e7b7a GNI/MI: added custom inspector view for viewing GDB/MI comminicatication trace
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
  1266
inspector2TabGDBMITrace
c4f07d0e7b7a GNI/MI: added custom inspector view for viewing GDB/MI comminicatication trace
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
  1267
    <inspector2Tab>
c4f07d0e7b7a GNI/MI: added custom inspector view for viewing GDB/MI comminicatication trace
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
  1268
    ^ (self newInspector2Tab)
c4f07d0e7b7a GNI/MI: added custom inspector view for viewing GDB/MI comminicatication trace
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
  1269
        label:'GDB/MI Trace';
c4f07d0e7b7a GNI/MI: added custom inspector view for viewing GDB/MI comminicatication trace
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
  1270
        priority:50;
c4f07d0e7b7a GNI/MI: added custom inspector view for viewing GDB/MI comminicatication trace
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
  1271
        application:[ GDBMITraceViewer new debugger:self ];
c4f07d0e7b7a GNI/MI: added custom inspector view for viewing GDB/MI comminicatication trace
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
  1272
        yourself
c4f07d0e7b7a GNI/MI: added custom inspector view for viewing GDB/MI comminicatication trace
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
  1273
c4f07d0e7b7a GNI/MI: added custom inspector view for viewing GDB/MI comminicatication trace
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
  1274
    "Modified (format): / 09-03-2018 / 10:09:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
c4f07d0e7b7a GNI/MI: added custom inspector view for viewing GDB/MI comminicatication trace
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
  1275
! !
c4f07d0e7b7a GNI/MI: added custom inspector view for viewing GDB/MI comminicatication trace
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
  1276
111
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1277
!GDBDebugger methodsFor:'queries'!
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1278
165
780e1f6168c5 Add new API `GDBDebugger >> #hasCommand:` to test support for particular MI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
  1279
hasCommand: aClassOrString
780e1f6168c5 Add new API `GDBDebugger >> #hasCommand:` to test support for particular MI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
  1280
    "Return `true`, if this debugger support given MI command, false otherwise.
780e1f6168c5 Add new API `GDBDebugger >> #hasCommand:` to test support for particular MI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
  1281
780e1f6168c5 Add new API `GDBDebugger >> #hasCommand:` to test support for particular MI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
  1282
     `aClassOrString can be either a MI command class (a subclass of GDBMICommand
780e1f6168c5 Add new API `GDBDebugger >> #hasCommand:` to test support for particular MI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
  1283
     or MI command string (inclusding starting dash).
780e1f6168c5 Add new API `GDBDebugger >> #hasCommand:` to test support for particular MI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
  1284
780e1f6168c5 Add new API `GDBDebugger >> #hasCommand:` to test support for particular MI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
  1285
     Note, that this can only query MI commands, queries for CLI command support
780e1f6168c5 Add new API `GDBDebugger >> #hasCommand:` to test support for particular MI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
  1286
     are not supported (limitation of GDB itself).
780e1f6168c5 Add new API `GDBDebugger >> #hasCommand:` to test support for particular MI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
  1287
    "
780e1f6168c5 Add new API `GDBDebugger >> #hasCommand:` to test support for particular MI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
  1288
    | commandString |
780e1f6168c5 Add new API `GDBDebugger >> #hasCommand:` to test support for particular MI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
  1289
780e1f6168c5 Add new API `GDBDebugger >> #hasCommand:` to test support for particular MI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
  1290
    supportedCommands isNil ifTrue:[ supportedCommands := Dictionary new ].
780e1f6168c5 Add new API `GDBDebugger >> #hasCommand:` to test support for particular MI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
  1291
    aClassOrString isClass ifTrue:[ 
780e1f6168c5 Add new API `GDBDebugger >> #hasCommand:` to test support for particular MI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
  1292
        self assert: (aClassOrString inheritsFrom: GDBMICommand).
780e1f6168c5 Add new API `GDBDebugger >> #hasCommand:` to test support for particular MI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
  1293
        commandString := aClassOrString new operation.
780e1f6168c5 Add new API `GDBDebugger >> #hasCommand:` to test support for particular MI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
  1294
    ] ifFalse:[ 
780e1f6168c5 Add new API `GDBDebugger >> #hasCommand:` to test support for particular MI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
  1295
        commandString := aClassOrString.
780e1f6168c5 Add new API `GDBDebugger >> #hasCommand:` to test support for particular MI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
  1296
    ].
780e1f6168c5 Add new API `GDBDebugger >> #hasCommand:` to test support for particular MI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
  1297
    ^ supportedCommands at: commandString ifAbsentPut:[ 
780e1f6168c5 Add new API `GDBDebugger >> #hasCommand:` to test support for particular MI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
  1298
        | result exists |
780e1f6168c5 Add new API `GDBDebugger >> #hasCommand:` to test support for particular MI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
  1299
780e1f6168c5 Add new API `GDBDebugger >> #hasCommand:` to test support for particular MI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
  1300
        result := self send: (GDBMI_info_gdb_mi_command arguments: (Array with: commandString)) andWait: true.
780e1f6168c5 Add new API `GDBDebugger >> #hasCommand:` to test support for particular MI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
  1301
        exists := ((result propertyAt: #command) at: #exists) = 'true'.
780e1f6168c5 Add new API `GDBDebugger >> #hasCommand:` to test support for particular MI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
  1302
        exists
780e1f6168c5 Add new API `GDBDebugger >> #hasCommand:` to test support for particular MI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
  1303
    ].
780e1f6168c5 Add new API `GDBDebugger >> #hasCommand:` to test support for particular MI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
  1304
780e1f6168c5 Add new API `GDBDebugger >> #hasCommand:` to test support for particular MI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
  1305
    "
780e1f6168c5 Add new API `GDBDebugger >> #hasCommand:` to test support for particular MI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
  1306
    GDBDebugger new hasCommand:
780e1f6168c5 Add new API `GDBDebugger >> #hasCommand:` to test support for particular MI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
  1307
    "
780e1f6168c5 Add new API `GDBDebugger >> #hasCommand:` to test support for particular MI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
  1308
780e1f6168c5 Add new API `GDBDebugger >> #hasCommand:` to test support for particular MI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
  1309
    "Created: / 29-12-2018 / 23:10:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
780e1f6168c5 Add new API `GDBDebugger >> #hasCommand:` to test support for particular MI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
  1310
!
780e1f6168c5 Add new API `GDBDebugger >> #hasCommand:` to test support for particular MI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
  1311
111
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1312
hasFeature: feature
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1313
    "Return true, if this debugger support given feature, false otherwise.
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1314
     See GDBFeatures pool for available features.
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1315
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1316
     Note however, that newer versions og GDB may have more features.
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1317
    "
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1318
    ^ self features includes: feature
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1319
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1320
    "Created: / 07-02-2018 / 11:32:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1321
    "Modified (comment): / 07-02-2018 / 12:44:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
116
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1322
!
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1323
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1324
hasFeatureAsync
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1325
    "Indicates that the target is capable of asynchronous command execution, which means 
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1326
     that GDB will accept further commands while the target is running." 
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1327
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1328
    targetFeatures notNil ifTrue:[ 
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1329
        ^ targetFeatures includes: 'async'
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1330
    ] ifFalse:[ 
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1331
        ^ connection nativeTargetFeatures includes: 'async'.
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1332
    ].
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1333
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1334
    "Created: / 09-04-2018 / 15:45:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
170
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1335
!
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1336
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1337
hasPendingCommands
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1338
    "Return `true` if there are commands being sent but not yet
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1339
     processed, `false` otherwise. By 'processed' we mean that 
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1340
     command result event not yet arrived or is waiting in a queue
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1341
     to be dispatched.
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1342
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1343
     Note that by the nature of event queues and threads, 
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1344
     return value may be obsolete by the time client uses
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1345
     it. Use with caution!!
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1346
    "
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1347
    ^ connection hasPendingCommands
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1348
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1349
    "Created: / 23-01-2019 / 20:41:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1350
!
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1351
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1352
hasPendingEvents
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1353
    "Return `true` if there are events in a queue wating
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1354
     to be dispatched, `false` otherwise.
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1355
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1356
     Note that by the nature of event queues and threads, 
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1357
     return value may be obsolete by the time client uses
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1358
     it. Use with caution!!
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1359
    "
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1360
    ^ connection hasPendingEvents
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1361
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1362
    "Created: / 23-01-2019 / 20:38:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
180
cd22cacfcdcb API: temporarily add `GDBDebugger >> nativeTargetHasFeature:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 175
diff changeset
  1363
!
cd22cacfcdcb API: temporarily add `GDBDebugger >> nativeTargetHasFeature:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 175
diff changeset
  1364
cd22cacfcdcb API: temporarily add `GDBDebugger >> nativeTargetHasFeature:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 175
diff changeset
  1365
nativeTargetHasFeature: aString
cd22cacfcdcb API: temporarily add `GDBDebugger >> nativeTargetHasFeature:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 175
diff changeset
  1366
    ^ connection nativeTargetFeatures includes:  aString
cd22cacfcdcb API: temporarily add `GDBDebugger >> nativeTargetHasFeature:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 175
diff changeset
  1367
cd22cacfcdcb API: temporarily add `GDBDebugger >> nativeTargetHasFeature:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 175
diff changeset
  1368
    "Created: / 13-03-2019 / 12:53:38 / jv"
cd22cacfcdcb API: temporarily add `GDBDebugger >> nativeTargetHasFeature:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 175
diff changeset
  1369
!
cd22cacfcdcb API: temporarily add `GDBDebugger >> nativeTargetHasFeature:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 175
diff changeset
  1370
cd22cacfcdcb API: temporarily add `GDBDebugger >> nativeTargetHasFeature:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 175
diff changeset
  1371
nativeTargetHasFeatureAsync
cd22cacfcdcb API: temporarily add `GDBDebugger >> nativeTargetHasFeature:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 175
diff changeset
  1372
    ^ self nativeTargetHasFeature: 'async'
cd22cacfcdcb API: temporarily add `GDBDebugger >> nativeTargetHasFeature:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 175
diff changeset
  1373
cd22cacfcdcb API: temporarily add `GDBDebugger >> nativeTargetHasFeature:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 175
diff changeset
  1374
    "Created: / 13-03-2019 / 12:53:54 / jv"
111
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1375
! !
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1376
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1377
!GDBDebugger methodsFor:'testing'!
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1378
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1379
isConnected
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1380
    ^ connection notNil
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1381
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1382
    "Created: / 20-06-2014 / 22:12:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
82
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
  1383
!
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
  1384
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
  1385
isFrameFiltersEnabled
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
  1386
    ^ frameFiltersEnabled
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
  1387
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
  1388
    "Created: / 12-06-2017 / 09:41:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
  1389
!
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
  1390
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
  1391
isPrettyPrintingEnabled
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
  1392
    ^ prettyPrintingEnabled
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
  1393
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
  1394
    "Created: / 12-06-2017 / 09:40:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1395
! !
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1396
111
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1397
!GDBDebugger methodsFor:'utilities'!
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1398
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1399
ensureFeature: feature
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1400
    "No-op if this debugger supports given `feature`, otherwise
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1401
     throw an error"
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1402
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1403
    (self hasFeature: feature) ifFalse:[ 
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1404
        GDBUnsupportedFeatureError newException
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1405
            parameter: self -> feature;
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1406
            messageText:'Unssuported feature: ' , feature printString;
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1407
            raise.                               
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1408
    ].
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1409
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1410
    "Created: / 07-02-2018 / 11:34:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
170
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1411
!
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1412
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1413
waitUntilAlCommandsProcessed
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1414
    "BLock caller until all commands are processed. This method is provided
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1415
     mainly for use in tests or synchronization. Normal code should avoid 
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1416
     using this.
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1417
    "
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1418
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1419
    self 
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1420
        assert:Processor activeProcess ~~ connection eventDispatchProcess
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1421
        message:'Cannot wait from within event dispatching process. Would deadlock'.           
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1422
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1423
    "/ Since this method is not required to be 100% accurate, polling seems
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1424
    "/ like an easy and safe approach. It's not meant for normal usage, anyway.
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1425
    [ self hasPendingCommands ] whileTrue:[ Delay waitForMilliseconds: 100 ].
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1426
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1427
    "Created: / 23-01-2019 / 21:03:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1428
!
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1429
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1430
waitUntilAllEventsProcessed
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1431
    "BLock caller until all events are processed. This method is provided
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1432
     mainly for use in tests or synchronization. Normal code should avoid 
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1433
     using this.
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1434
    "
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1435
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1436
    self 
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1437
        assert:Processor activeProcess ~~ connection eventDispatchProcess
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1438
        message:'Cannot wait from within event dispatching process. Would deadlock'.           
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1439
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1440
    "/ Since this method is not required to be 100% accurate, polling seems
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1441
    "/ like an easy and safe approach. It's not meant for normal usage, anyway.
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1442
    [ self hasPendingEvents ] whileTrue:[ Delay waitForMilliseconds: 100 ].
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1443
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1444
    "Created: / 23-01-2019 / 21:03:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
111
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1445
! !
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1446
21
83395ca8b257 Renamed GDB to GDBDebugger
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
  1447
!GDBDebugger class methodsFor:'documentation'!
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
  1448
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
  1449
version_HG
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
  1450
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
  1451
    ^ '$Changeset: <not expanded> $'
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
  1452
! !
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
  1453