GDBDebugger.st
author Jan Vrany <jan.vrany@labware.com>
Mon, 04 Sep 2023 14:00:57 +0100
changeset 314 4a2ef5a087f0
parent 304 0dd4d6bc9b90
child 315 91819b724b59
permissions -rw-r--r--
Add MI parser test This commit add test to parse real-world frament which failed to Pharo properly at some point. It is encoded here as bytearray to make sure all the characters are preserved exactly as they were.
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
272
cdd1c9ad00de Change class categories to facilitate Pharo port
Jan Vrany <jan.vrany@labware.com>
parents: 271
diff changeset
     6
Copyright (C) 2021-2023 LabWare
91
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
     7
259
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 257
diff changeset
     8
Permission is hereby granted, free of charge, to any person obtaining a copy
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 257
diff changeset
     9
of this software and associated documentation files (the 'Software'), to deal
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 257
diff changeset
    10
in the Software without restriction, including without limitation the rights
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 257
diff changeset
    11
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 257
diff changeset
    12
copies of the Software, and to permit persons to whom the Software is
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 257
diff changeset
    13
furnished to do so, subject to the following conditions:
91
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    14
259
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 257
diff changeset
    15
The above copyright notice and this permission notice shall be included in all
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 257
diff changeset
    16
copies or substantial portions of the Software.
91
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    17
259
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 257
diff changeset
    18
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 257
diff changeset
    19
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 257
diff changeset
    20
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 257
diff changeset
    21
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 257
diff changeset
    22
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 257
diff changeset
    23
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 257
diff changeset
    24
SOFTWARE.
91
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    25
"
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
"{ Package: 'jv:libgdbs' }"
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
53
63669c2c0f9e Test fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
    28
"{ NameSpace: Smalltalk }"
63669c2c0f9e Test fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
    29
223
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
    30
Model subclass:#GDBDebugger
35
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
    31
	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
    32
		inferiors breakpoints selectedThread selectedFrame
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
    33
		prettyPrintingEnabled frameFiltersEnabled finalizationRegistry
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
    34
		debuggerFeatures targetFeatures supportedCommands directories
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
    35
		properties'
286
d22bc8f82f88 Compatibility: refactor finalization of debuggers and variable objects
Jan Vrany <jan.vrany@labware.com>
parents: 274
diff changeset
    36
	classVariableNames:'FinalizationLobby'
111
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
    37
	poolDictionaries:'GDBCommandStatus GDBFeatures'
272
cdd1c9ad00de Change class categories to facilitate Pharo port
Jan Vrany <jan.vrany@labware.com>
parents: 271
diff changeset
    38
	category:'GDB'
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
!
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
91
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    41
!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
    42
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    43
copyright
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
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
    46
Copyright (C) 2015-now Jan Vrany
272
cdd1c9ad00de Change class categories to facilitate Pharo port
Jan Vrany <jan.vrany@labware.com>
parents: 271
diff changeset
    47
Copyright (C) 2021-2023 LabWare
91
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    48
259
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 257
diff changeset
    49
Permission is hereby granted, free of charge, to any person obtaining a copy
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 257
diff changeset
    50
of this software and associated documentation files (the 'Software'), to deal
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 257
diff changeset
    51
in the Software without restriction, including without limitation the rights
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 257
diff changeset
    52
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 257
diff changeset
    53
copies of the Software, and to permit persons to whom the Software is
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 257
diff changeset
    54
furnished to do so, subject to the following conditions:
91
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    55
259
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 257
diff changeset
    56
The above copyright notice and this permission notice shall be included in all
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 257
diff changeset
    57
copies or substantial portions of the Software.
91
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    58
259
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 257
diff changeset
    59
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 257
diff changeset
    60
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 257
diff changeset
    61
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 257
diff changeset
    62
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 257
diff changeset
    63
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 257
diff changeset
    64
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 257
diff changeset
    65
SOFTWARE.
91
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    66
"
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    67
! !
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    68
286
d22bc8f82f88 Compatibility: refactor finalization of debuggers and variable objects
Jan Vrany <jan.vrany@labware.com>
parents: 274
diff changeset
    69
!GDBDebugger class methodsFor:'initialization'!
d22bc8f82f88 Compatibility: refactor finalization of debuggers and variable objects
Jan Vrany <jan.vrany@labware.com>
parents: 274
diff changeset
    70
d22bc8f82f88 Compatibility: refactor finalization of debuggers and variable objects
Jan Vrany <jan.vrany@labware.com>
parents: 274
diff changeset
    71
initialize
d22bc8f82f88 Compatibility: refactor finalization of debuggers and variable objects
Jan Vrany <jan.vrany@labware.com>
parents: 274
diff changeset
    72
d22bc8f82f88 Compatibility: refactor finalization of debuggers and variable objects
Jan Vrany <jan.vrany@labware.com>
parents: 274
diff changeset
    73
    FinalizationLobby := Registry new.
d22bc8f82f88 Compatibility: refactor finalization of debuggers and variable objects
Jan Vrany <jan.vrany@labware.com>
parents: 274
diff changeset
    74
d22bc8f82f88 Compatibility: refactor finalization of debuggers and variable objects
Jan Vrany <jan.vrany@labware.com>
parents: 274
diff changeset
    75
    "Modified: / 14-07-2023 / 14:16:35 / Jan Vrany <jan.vrany@labware.com>"
d22bc8f82f88 Compatibility: refactor finalization of debuggers and variable objects
Jan Vrany <jan.vrany@labware.com>
parents: 274
diff changeset
    76
! !
d22bc8f82f88 Compatibility: refactor finalization of debuggers and variable objects
Jan Vrany <jan.vrany@labware.com>
parents: 274
diff changeset
    77
21
83395ca8b257 Renamed GDB to GDBDebugger
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
    78
!GDBDebugger class methodsFor:'instance creation'!
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    79
93
b1715ebf8df1 Resurected old `GDBProcess` implementation using pipes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 91
diff changeset
    80
new    
b1715ebf8df1 Resurected old `GDBProcess` implementation using pipes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 91
diff changeset
    81
    ^ 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
    82
93
b1715ebf8df1 Resurected old `GDBProcess` implementation using pipes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 91
diff changeset
    83
    "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
    84
!
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    85
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
    86
newWithProcess: aGDBProcess
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
    87
    ^ self basicNew initializeWithProcess: aGDBProcess
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
    88
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
    89
    "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
    90
! !
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
21
83395ca8b257 Renamed GDB to GDBDebugger
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
    92
!GDBDebugger methodsFor:'accessing'!
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    93
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    94
announcer
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
    95
    ^ connection eventAnnouncer.
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    96
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    97
    "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
    98
!
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    99
120
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   100
breakpointForId: id
175
a04e1a36e888 Fix for multi-location breakpoints created initially as pending
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   101
    ^ 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
   102
a04e1a36e888 Fix for multi-location breakpoints created initially as pending
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   103
    "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
   104
    "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
   105
!
a04e1a36e888 Fix for multi-location breakpoints created initially as pending
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   106
a04e1a36e888 Fix for multi-location breakpoints created initially as pending
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   107
breakpointForId: id ifAbsent: block
120
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   108
    self breakpoints do:[:bp |
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   109
        bp number = id ifTrue:[ ^ bp ].
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   110
        bp locations do: [ :loc |
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   111
            loc number = id ifTrue:[ ^ loc ].
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   112
        ].
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   113
    ].
175
a04e1a36e888 Fix for multi-location breakpoints created initially as pending
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   114
    ^ block value.
120
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   115
175
a04e1a36e888 Fix for multi-location breakpoints created initially as pending
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   116
    "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
   117
!
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   118
87
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   119
breakpoints
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   120
    breakpoints isNil ifTrue:[ 
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   121
        breakpoints := List new.
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   122
    ].
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   123
    ^ breakpoints
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   124
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   125
    "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
   126
!
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   127
79
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   128
consoleInput
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   129
    ^ connection consoleInput
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   130
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   131
    "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
   132
    "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
   133
!
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   134
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   135
consoleOutput
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   136
    ^ connection consoleOutput
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   137
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   138
    "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
   139
    "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
   140
!
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   141
114
be5bdaecb9b3 API: added methods for querying source directories
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
   142
directories
be5bdaecb9b3 API: added methods for querying source directories
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
   143
    "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
   144
     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
   145
    "
be5bdaecb9b3 API: added methods for querying source directories
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
   146
    | result |
be5bdaecb9b3 API: added methods for querying source directories
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
   147
be5bdaecb9b3 API: added methods for querying source directories
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
   148
    directories isNil ifTrue:[
be5bdaecb9b3 API: added methods for querying source directories
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
   149
        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
   150
258bf0b2317c Fixed `GDBDebugger >> directories` to work on Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 116
diff changeset
   151
        OperatingSystem isMSWINDOWSlike ifTrue:[ 
258bf0b2317c Fixed `GDBDebugger >> directories` to work on Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 116
diff changeset
   152
            "/ 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
   153
            "/ 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
   154
            directories := ((result propertyAt: #value) tokensBasedOn: $;) 
258bf0b2317c Fixed `GDBDebugger >> directories` to work on Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 116
diff changeset
   155
                                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
   156
                                as: Array.
258bf0b2317c Fixed `GDBDebugger >> directories` to work on Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 116
diff changeset
   157
        ] ifFalse:[ 
258bf0b2317c Fixed `GDBDebugger >> directories` to work on Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 116
diff changeset
   158
            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
   159
        ].
114
be5bdaecb9b3 API: added methods for querying source directories
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
   160
    ].
be5bdaecb9b3 API: added methods for querying source directories
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
   161
    ^ directories
be5bdaecb9b3 API: added methods for querying source directories
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
   162
be5bdaecb9b3 API: added methods for querying source directories
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
   163
    "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
   164
    "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
   165
!
be5bdaecb9b3 API: added methods for querying source directories
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
   166
111
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   167
features
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   168
    "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
   169
     See 
250
545a1e6ab513 Add new convenience APIs in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 243
diff changeset
   170
            * `GDBFeatures` pool
111
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   171
            * 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
   172
              command `-list-features`
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   173
    "
250
545a1e6ab513 Add new convenience APIs in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 243
diff changeset
   174
    | features |
545a1e6ab513 Add new convenience APIs in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 243
diff changeset
   175
545a1e6ab513 Add new convenience APIs in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 243
diff changeset
   176
    features := targetFeatures.
545a1e6ab513 Add new convenience APIs in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 243
diff changeset
   177
    features isNil ifTrue:[
545a1e6ab513 Add new convenience APIs in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 243
diff changeset
   178
        "/ No target (or target event support), use default features of native target.
545a1e6ab513 Add new convenience APIs in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 243
diff changeset
   179
        "/ But be careful, when GDB quits, connection may be gone!!
545a1e6ab513 Add new convenience APIs in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 243
diff changeset
   180
        features := #().
545a1e6ab513 Add new convenience APIs in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 243
diff changeset
   181
        connection notNil ifTrue: [ 
545a1e6ab513 Add new convenience APIs in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 243
diff changeset
   182
            features := connection nativeTargetFeatures
545a1e6ab513 Add new convenience APIs in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 243
diff changeset
   183
        ].
545a1e6ab513 Add new convenience APIs in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 243
diff changeset
   184
    ].
545a1e6ab513 Add new convenience APIs in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 243
diff changeset
   185
545a1e6ab513 Add new convenience APIs in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 243
diff changeset
   186
    ^ debuggerFeatures , features.
111
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   187
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   188
    "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
   189
    "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
   190
    "Modified: / 09-04-2018 / 15:39:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
250
545a1e6ab513 Add new convenience APIs in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 243
diff changeset
   191
    "Modified: / 17-11-2021 / 15:35:34 / Jan Vrany <jan.vrany@labware.com>"
111
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   192
!
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   193
36
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   194
inferiorForId: id
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   195
    ^ inferiors ? #() detect:[:e | e id = id ] ifNone:[ 
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   196
        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
   197
    ].
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   198
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   199
    "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
   200
!
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   201
10
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   202
inferiorStderr
294
7c84fcc868e2 Compatiblity: refactor `GDBPTY` to allow separate stream objects for reading and writing
Jan Vrany <jan.vrany@labware.com>
parents: 292
diff changeset
   203
    ^ connection inferiorPTY masterReadStream
10
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   204
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   205
    "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
   206
    "Modified: / 09-06-2014 / 18:26:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
294
7c84fcc868e2 Compatiblity: refactor `GDBPTY` to allow separate stream objects for reading and writing
Jan Vrany <jan.vrany@labware.com>
parents: 292
diff changeset
   207
    "Modified: / 02-08-2023 / 12:51:17 / Jan Vrany <jan.vrany@labware.com>"
10
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   208
!
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   209
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   210
inferiorStdin
294
7c84fcc868e2 Compatiblity: refactor `GDBPTY` to allow separate stream objects for reading and writing
Jan Vrany <jan.vrany@labware.com>
parents: 292
diff changeset
   211
    ^ connection inferiorPTY masterWriteStream
10
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   212
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   213
    "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
   214
    "Modified: / 09-06-2014 / 18:27:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
294
7c84fcc868e2 Compatiblity: refactor `GDBPTY` to allow separate stream objects for reading and writing
Jan Vrany <jan.vrany@labware.com>
parents: 292
diff changeset
   215
    "Modified: / 02-08-2023 / 12:51:26 / Jan Vrany <jan.vrany@labware.com>"
10
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   216
!
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   217
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   218
inferiorStdout
294
7c84fcc868e2 Compatiblity: refactor `GDBPTY` to allow separate stream objects for reading and writing
Jan Vrany <jan.vrany@labware.com>
parents: 292
diff changeset
   219
    ^ connection inferiorPTY masterReadStream
10
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   220
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   221
    "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
   222
    "Modified: / 09-06-2014 / 18:27:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
294
7c84fcc868e2 Compatiblity: refactor `GDBPTY` to allow separate stream objects for reading and writing
Jan Vrany <jan.vrany@labware.com>
parents: 292
diff changeset
   223
    "Modified: / 02-08-2023 / 12:51:05 / 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
   224
!
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   225
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   226
inferiors
87
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   227
    ^ inferiors ? #()
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   228
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   229
    "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
   230
!
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   231
223
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   232
selectedFrame
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   233
    ^ selectedFrame
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   234
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   235
    "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
   236
!
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   237
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   238
selectedInferior
223
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   239
    selectedThread isNil ifTrue: [ 
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   240
        inferiors size == 1 ifTrue: [ 
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   241
            ^ inferiors anyOne
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   242
        ].
223
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   243
        ^ nil
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   244
    ].
223
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   245
    ^ selectedThread group
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   246
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   247
    "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
   248
    "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
   249
!
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   250
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   251
selectedThread
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   252
    ^ selectedThread
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   253
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   254
    "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
   255
!
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
   256
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
   257
threadForId: id
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
   258
    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
   259
        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
   260
            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
   261
        ].
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
   262
    ].
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
   263
    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
   264
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
   265
    "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
   266
! !
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   267
21
83395ca8b257 Renamed GDB to GDBDebugger
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   268
!GDBDebugger methodsFor:'accessing-private'!
10
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   269
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
   270
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
   271
    ^ 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
   272
c4f07d0e7b7a GNI/MI: added custom inspector view for viewing GDB/MI comminicatication trace
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
   273
    "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
   274
!
c4f07d0e7b7a GNI/MI: added custom inspector view for viewing GDB/MI comminicatication trace
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
   275
19
c48d33e27d34 Added internal announcer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 12
diff changeset
   276
currentInferiorStateSequnceNumber
c48d33e27d34 Added internal announcer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 12
diff changeset
   277
    ^ inferiorStateSequenceNumber
c48d33e27d34 Added internal announcer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 12
diff changeset
   278
c48d33e27d34 Added internal announcer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 12
diff changeset
   279
    "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
   280
!
c48d33e27d34 Added internal announcer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 12
diff changeset
   281
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   282
nextCommandSequnceNumber
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   283
    commandSequenceNumber := commandSequenceNumber + 1.
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   284
    commandSequenceNumber == SmallInteger maxVal ifTrue:[ 
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   285
        commandSequenceNumber := 0.
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   286
    ].
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   287
    ^ commandSequenceNumber
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   288
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   289
    "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
   290
!
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   291
19
c48d33e27d34 Added internal announcer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 12
diff changeset
   292
nextInferiorStateSequnceNumber
c48d33e27d34 Added internal announcer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 12
diff changeset
   293
    inferiorStateSequenceNumber := inferiorStateSequenceNumber + 1.
c48d33e27d34 Added internal announcer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 12
diff changeset
   294
    inferiorStateSequenceNumber == SmallInteger maxVal ifTrue:[
c48d33e27d34 Added internal announcer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 12
diff changeset
   295
        inferiorStateSequenceNumber := 0.
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   296
    ].
19
c48d33e27d34 Added internal announcer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 12
diff changeset
   297
    ^ inferiorStateSequenceNumber
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   298
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   299
    "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
   300
!
4e1be69b39ce API: add `GDBDebugger >> process`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 180
diff changeset
   301
4e1be69b39ce API: add `GDBDebugger >> process`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 180
diff changeset
   302
process
4e1be69b39ce API: add `GDBDebugger >> process`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 180
diff changeset
   303
    "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
   304
4e1be69b39ce API: add `GDBDebugger >> process`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 180
diff changeset
   305
     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
   306
     should not be normally used."
4e1be69b39ce API: add `GDBDebugger >> process`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 180
diff changeset
   307
4e1be69b39ce API: add `GDBDebugger >> process`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 180
diff changeset
   308
    ^ connection process
4e1be69b39ce API: add `GDBDebugger >> process`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 180
diff changeset
   309
4e1be69b39ce API: add `GDBDebugger >> process`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 180
diff changeset
   310
    "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
   311
!
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   312
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   313
selectedThread: thread frame: frame
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   314
    selectedThread ~= thread ifTrue: [ 
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   315
        | oldSelectedInferior newSelectedInferior |
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   316
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   317
        oldSelectedInferior := self selectedInferior.
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   318
        selectedThread := thread.
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   319
        selectedFrame := frame.
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   320
        newSelectedInferior := self selectedInferior.
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   321
        oldSelectedInferior ~~ newSelectedInferior ifTrue: [ 
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   322
            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
   323
        ].
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   324
        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
   325
        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
   326
    ] ifFalse: [ 
251
e34f610942df Experimental improvement of tracking register changes
Jan Vrany <jan.vrany@labware.com>
parents: 250
diff changeset
   327
        selectedFrame ~= frame ifTrue: [
255
7b97dc7ee9a0 Oops, correctly handle case where `#selectedFrame` is `nil`
Jan Vrany <jan.vrany@labware.com>
parents: 253
diff changeset
   328
            (selectedFrame notNil and:[selectedFrame isSameAs: frame]) ifTrue: [
251
e34f610942df Experimental improvement of tracking register changes
Jan Vrany <jan.vrany@labware.com>
parents: 250
diff changeset
   329
                selectedFrame invalidate.
e34f610942df Experimental improvement of tracking register changes
Jan Vrany <jan.vrany@labware.com>
parents: 250
diff changeset
   330
                selectedFrame setAddr: frame addr.
e34f610942df Experimental improvement of tracking register changes
Jan Vrany <jan.vrany@labware.com>
parents: 250
diff changeset
   331
                selectedFrame setLine: frame line.
e34f610942df Experimental improvement of tracking register changes
Jan Vrany <jan.vrany@labware.com>
parents: 250
diff changeset
   332
            ] ifFalse: [ 
e34f610942df Experimental improvement of tracking register changes
Jan Vrany <jan.vrany@labware.com>
parents: 250
diff changeset
   333
                selectedFrame := frame.
e34f610942df Experimental improvement of tracking register changes
Jan Vrany <jan.vrany@labware.com>
parents: 250
diff changeset
   334
            ].
223
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   335
            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
   336
        ].
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   337
    ].
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   338
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
   339
    "Created: / 09-03-2021 / 14:54:42 / Jan Vrany <jan.vrany@labware.com>"
255
7b97dc7ee9a0 Oops, correctly handle case where `#selectedFrame` is `nil`
Jan Vrany <jan.vrany@labware.com>
parents: 253
diff changeset
   340
    "Modified: / 24-01-2022 / 15:59:26 / 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
   341
! !
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   342
196
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   343
!GDBDebugger methodsFor:'accessing-properties'!
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   344
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   345
properties
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   346
    ^ self objectAttributes
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   347
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   348
    "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
   349
!
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   350
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   351
propertyAt: name    
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   352
    ^ self objectAttributeAt: name
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   353
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   354
    "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
   355
    "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
   356
!
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   357
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   358
propertyAt: name put: value
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   359
    self assert: name isSymbol.
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   360
    ^ self objectAttributeAt: name put: value.
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   361
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   362
    "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
   363
    "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
   364
! !
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   365
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   366
!GDBDebugger methodsFor:'attributes access'!
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   367
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   368
objectAttributes
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   369
    ^ properties
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   370
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   371
    "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
   372
!
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   373
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   374
objectAttributes: aDictionary
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   375
    properties := aDictionary
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   376
80ab1ba7990a Add property API to `GDBDebugger`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 190
diff changeset
   377
    "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
   378
! !
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   379
21
83395ca8b257 Renamed GDB to GDBDebugger
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   380
!GDBDebugger methodsFor:'commands'!
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   381
222
2c06fc7c39f5 Add command pre-execute and post-executehook
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   382
push: event
2c06fc7c39f5 Add command pre-execute and post-executehook
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   383
    "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
   384
2c06fc7c39f5 Add command pre-execute and post-executehook
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   385
    self assert: (event isKindOf: GDBEvent).
2c06fc7c39f5 Add command pre-execute and post-executehook
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   386
    connection pushEvent: event
2c06fc7c39f5 Add command pre-execute and post-executehook
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   387
2c06fc7c39f5 Add command pre-execute and post-executehook
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   388
    "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
   389
!
2c06fc7c39f5 Add command pre-execute and post-executehook
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   390
56
20989de12cfb More work on variables + tests
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 53
diff changeset
   391
send: command
64
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   392
    "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
   393
     `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
   394
     be parsed into a GDBCommand. 
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   395
   "
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   396
    ^ 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
   397
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   398
    "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
   399
    "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
   400
!
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   401
64
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   402
send:command andWait:wait 
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   403
    "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
   404
     command to finish and return the command result.  
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   405
     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
   406
85
6fea1000a2a5 Implemented proper quoting of MI commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 82
diff changeset
   407
     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
   408
     is thrown.
6fea1000a2a5 Implemented proper quoting of MI commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 82
diff changeset
   409
64
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   410
     `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
   411
     be parsed into a GDBCommand.           
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
    
96
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   414
    | blocker result |
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   415
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
   416
    self assert: self isConnected.
64
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   417
    ^ wait ifTrue:[
243
aaaf3757899b Allow commands to be sent and waited for from event dispatch loop
Jan Vrany <jan.vrany@labware.com>
parents: 240
diff changeset
   418
"/        self 
aaaf3757899b Allow commands to be sent and waited for from event dispatch loop
Jan Vrany <jan.vrany@labware.com>
parents: 240
diff changeset
   419
"/            assert:Processor activeProcess ~~ connection eventDispatchProcess
aaaf3757899b Allow commands to be sent and waited for from event dispatch loop
Jan Vrany <jan.vrany@labware.com>
parents: 240
diff changeset
   420
"/            message:'Cannot send commands from within event dispatching process. Would deadlock'.
302
fdfe1a981363 Compatibility: allow ports to customize semaphore / mutex creation
Jan Vrany <jan.vrany@labware.com>
parents: 295
diff changeset
   421
        blocker := GDBPortlib current newSemaphore.
96
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   422
        self send: command andWithResultDo: [ :r | 
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   423
            result := r.
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   424
            blocker signal
64
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   425
        ].
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   426
        blocker wait.
85
6fea1000a2a5 Implemented proper quoting of MI commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 82
diff changeset
   427
        result isError ifTrue:[
88
90c50fd6374c Introduced new exception class: `GDBCommandFailedError`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 87
diff changeset
   428
            GDBCommandFailedError raiseForResult: result.
85
6fea1000a2a5 Implemented proper quoting of MI commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 82
diff changeset
   429
        ].
40
0ce76b671515 Some more support for stack frames.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 38
diff changeset
   430
        result.
64
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   431
    ]
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   432
    ifFalse:[
96
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   433
        | cmd |
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   434
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   435
        cmd := command.
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   436
        cmd isString ifTrue:[
174
18ef81a3fee5 Add `GDBCLICommand >> #operation` returning (expanded) CLI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 172
diff changeset
   437
            cmd := GDBCommand parse:cmd.
96
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   438
        ].    
116
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   439
        cmd token: self nextCommandSequnceNumber.
257
0366f709feb8 Add `GDBConnection >> pushCommand:`
Jan Vrany <jan.vrany@labware.com>
parents: 255
diff changeset
   440
        connection pushCommand:cmd.
40
0ce76b671515 Some more support for stack frames.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 38
diff changeset
   441
        nil.
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   442
    ]
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   443
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   444
    "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
   445
    "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
   446
    "Modified: / 28-01-2019 / 21:26:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
302
fdfe1a981363 Compatibility: allow ports to customize semaphore / mutex creation
Jan Vrany <jan.vrany@labware.com>
parents: 295
diff changeset
   447
    "Modified: / 18-08-2023 / 14:17:04 / Jan Vrany <jan.vrany@labware.com>"
64
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   448
!
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   449
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   450
send:command andWaitFor:eventHandlers
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   451
    "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
   452
     `eventHandlers`. 
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
     Params:
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   455
     `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
   456
                    be parsed into a GDBCommand.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   457
     `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
   458
                    of event classes or blocks.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   459
                    - 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
   460
                    - 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
   461
                      subclasses are handled too.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   462
                    - 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
   463
                    - 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
   464
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   465
     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
   466
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   467
    ^ self send: command andWaitFor: eventHandlers withTimeoutMs: nil
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   468
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   469
    "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
   470
!
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   471
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   472
send:command andWaitFor:eventHandlers withTimeoutMs:timeout 
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   473
    "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
   474
     `eventHandlers`. Raise a TimeoutError if expected events don't arrive
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   475
     in specified time.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   476
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   477
     Params:
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   478
     `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
   479
                    be parsed into a GDBCommand.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   480
     `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
   481
                    of event classes or blocks.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   482
                    - 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
   483
                    - 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
   484
                      subclasses are handled too.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   485
                    - 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
   486
                    - 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
   487
     `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
   488
                    then wait for indefinitly
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   489
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   490
     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
   491
    
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   492
    | commandObject |
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   493
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
   494
    self assert: self isConnected.
64
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   495
    command isString ifTrue:[
169
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   496
        commandObject := GDBCommand parse: command.
64
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   497
        commandObject token:self nextCommandSequnceNumber.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   498
    ] ifFalse:[
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   499
        commandObject := command.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   500
        commandObject token isNil ifTrue:[
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   501
            commandObject token:self nextCommandSequnceNumber.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   502
        ].
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   503
    ].
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   504
    ^ self 
257
0366f709feb8 Add `GDBConnection >> pushCommand:`
Jan Vrany <jan.vrany@labware.com>
parents: 255
diff changeset
   505
        do:[ connection pushCommand: commandObject ] 
64
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   506
        andWaitFor: eventHandlers 
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   507
        withTimeoutMs: timeout
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   508
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   509
    "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
   510
    "Modified: / 19-01-2019 / 23:05:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
257
0366f709feb8 Add `GDBConnection >> pushCommand:`
Jan Vrany <jan.vrany@labware.com>
parents: 255
diff changeset
   511
    "Modified: / 22-02-2022 / 13:07:20 / Jan Vrany <jan.vrany@labware.com>"
96
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   512
!
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
send:command andWithResultDo: block
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   515
    "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
   516
     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
   517
     result (as instance of GDBCommandResult)
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
     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
   520
     be parsed into a GDBCommand.
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   521
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   522
     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
   523
     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
   524
     dispatch loop.
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   525
166
5cb191425081 Add class for new MI command `-complete`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 165
diff changeset
   526
     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
   527
     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
   528
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   529
         doSomeAction
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   530
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   531
             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
   532
                      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
   533
    "
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   534
    
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   535
    | cmd  token handler1  handler2  result |
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   536
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
   537
    self assert: self isConnected.
96
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   538
    cmd := command.
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   539
    cmd isString ifTrue:[
169
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   540
        cmd := GDBCommand parse:cmd.
96
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   541
    ].
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   542
    token := self nextCommandSequnceNumber.
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   543
    cmd token:token.
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   544
    handler1 := [:ev | 
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   545
        ev token == token ifTrue:[
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   546
            connection eventAnnouncer unsubscribe:handler1.
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   547
            result := ev result.
235
51f916ee4111 Renamed `GDBEventSet` to `GDBEventSequence`
Jan Vrany <jan.vrany@labware.com>
parents: 231
diff changeset
   548
            connection eventAnnouncerInternal when:GDBEventSequenceProcessingFinished
96
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   549
                do:handler2.
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   550
        ]
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   551
    ].
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   552
    handler2 := [:ev | 
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   553
        connection eventAnnouncerInternal unsubscribe:handler2.
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   554
        block value: result.
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   555
    ].
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   556
    connection eventAnnouncer when:GDBCommandResultEvent do:handler1.
257
0366f709feb8 Add `GDBConnection >> pushCommand:`
Jan Vrany <jan.vrany@labware.com>
parents: 255
diff changeset
   557
    connection pushCommand:cmd.
96
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   558
    ^ nil
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   559
43591d874c9f Added API method `GDBDebugger >> send:andWithResultDo:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   560
    "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
   561
    "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
   562
    "Modified: / 19-01-2019 / 23:06:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
257
0366f709feb8 Add `GDBConnection >> pushCommand:`
Jan Vrany <jan.vrany@labware.com>
parents: 255
diff changeset
   563
    "Modified: / 22-02-2022 / 13:07:30 / Jan Vrany <jan.vrany@labware.com>"
64
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   564
! !
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   565
82
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   566
!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
   567
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   568
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
   569
    "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
   570
     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
   571
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   572
        (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
   573
    "
97
b17c889076e4 Added API for memory dumps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 96
diff changeset
   574
    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
   575
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   576
    "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
   577
    "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
   578
!
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   579
126
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   580
disassembleFile: file line: line count: count
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
    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
   583
    Returns a list of GDBInstructionsAndSourceLine objects.
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
    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
   586
    source `file` and `line`.
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   587
    "
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
    | cmd result disassembly |
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
    self assert: file isString.
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   592
    self assert: line isInteger.
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   593
    self assert:(count isNil or:[ count isInteger ]).
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
    count notNil ifTrue:[ 
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   596
        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
   597
    ] ifFalse:[ 
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   598
        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
   599
    ].
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   600
    result := self send: cmd.
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   601
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   602
    disassembly := result propertyAt: 'asm_insns'
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   603
.   disassembly do:[:each | each setDebugger: self ].
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   604
    ^ disassembly
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   605
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   606
    "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
   607
!
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   608
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   609
disassembleFunction: address
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   610
    "
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   611
    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
   612
    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
   613
    appears in debug info)
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   614
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   615
    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
   616
    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
   617
    8.2.
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   618
    "
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   619
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   620
    | result disassembly |
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   621
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   622
    self assert: address isString.
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   623
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   624
    self ensureFeature: 'data-disassemble-a-option'.
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   625
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   626
    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
   627
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   628
    disassembly := result propertyAt: 'asm_insns'
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   629
.   disassembly do:[:each | each setDebugger: self ].
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   630
    ^ disassembly
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   631
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   632
    "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
   633
!
fb73b0af430b Added initial support for disassembling
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   634
82
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   635
enableFrameFilters
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   636
    "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
   637
     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
   638
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   639
     @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
   640
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   641
    | result |
111
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   642
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   643
    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
   644
    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
   645
    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
   646
        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
   647
    ] ifFalse:[ 
153
dd55019f1d86 Partability: use ANSI `#signal:` to raise an exception
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 148
diff changeset
   648
        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
   649
    ].
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   650
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   651
    "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
   652
    "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
   653
!
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   654
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   655
enablePrettyPrinting
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   656
    "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
   657
     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
   658
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   659
     @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
   660
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   661
    | result |
111
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   662
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   663
    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
   664
    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
   665
    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
   666
        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
   667
    ] ifFalse:[ 
153
dd55019f1d86 Partability: use ANSI `#signal:` to raise an exception
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 148
diff changeset
   668
        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
   669
    ].
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   670
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   671
    "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
   672
    "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
   673
!
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   674
109
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   675
evaluate: expression
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   676
    "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
   677
     Returns the result as `GDBVariableObject`,"
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   678
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   679
    ^ self evaluate: expression in: nil
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   680
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   681
    "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
   682
!
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   683
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   684
evaluate: expression in: frame
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   685
    "Evaluates passed `expression` (in target language). If
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   686
     `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
   687
     context of that `frame`.
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   688
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   689
     Returns the result as `GDBVariableObject`,"
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   690
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   691
    | result varobj |
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   692
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   693
    frame notNil ifTrue:[
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   694
        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
   695
    ] ifFalse:[
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   696
        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
   697
    ].
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   698
    varobj := result value.
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   699
    varobj 
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   700
        setDebugger: self; 
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   701
        setExpression: expression;
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   702
        setFrame: frame;
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   703
        registerForFinalization. 
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   704
    ^ varobj
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   705
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   706
    "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
   707
    "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
   708
!
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   709
82
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   710
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
   711
    "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
   712
     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
   713
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   714
        (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
   715
    "
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   716
    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
   717
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   718
    "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
   719
    "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
   720
!
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   721
271
b3d47d1cb55d Initial support pro Pharo
Jan Vrany <jan.vrany@labware.com>
parents: 259
diff changeset
   722
executable: aStringOrFilename 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
   723
    "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
   724
     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
   725
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   726
        (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
   727
        (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
   728
    "
97
b17c889076e4 Added API for memory dumps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 96
diff changeset
   729
    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
   730
    anArray notEmptyOrNil ifTrue:[ 
97
b17c889076e4 Added API for memory dumps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 96
diff changeset
   731
        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
   732
    ].
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   733
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   734
    "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
   735
    "Modified: / 09-02-2018 / 09:44:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
302
fdfe1a981363 Compatibility: allow ports to customize semaphore / mutex creation
Jan Vrany <jan.vrany@labware.com>
parents: 295
diff changeset
   736
    "Modified: / 18-08-2023 / 14:11:27 / 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
   737
!
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 102
diff changeset
   738
250
545a1e6ab513 Add new convenience APIs in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 243
diff changeset
   739
exit
545a1e6ab513 Add new convenience APIs in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 243
diff changeset
   740
    self send: GDBMI_gdb_exit new andWait: false
545a1e6ab513 Add new convenience APIs in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 243
diff changeset
   741
545a1e6ab513 Add new convenience APIs in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 243
diff changeset
   742
    "Created: / 17-11-2021 / 16:50:37 / Jan Vrany <jan.vrany@labware.com>"
545a1e6ab513 Add new convenience APIs in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 243
diff changeset
   743
!
545a1e6ab513 Add new convenience APIs in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 243
diff changeset
   744
169
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   745
getParameter:name 
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   746
    "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
   747
     See `show` GDB command.
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   748
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   749
     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
   750
     when parameter value changes.
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   751
    "
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   752
    
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   753
    | result |
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   754
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   755
    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
   756
    ^ result propertyAt:#value.
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   757
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   758
    "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
   759
!
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   760
200
e9250da35d87 API: add method for importing Python support code
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 196
diff changeset
   761
pythonImport: module
e9250da35d87 API: add method for importing Python support code
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 196
diff changeset
   762
    "Import a Python module"
e9250da35d87 API: add method for importing Python support code
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 196
diff changeset
   763
e9250da35d87 API: add method for importing Python support code
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 196
diff changeset
   764
    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
   765
e9250da35d87 API: add method for importing Python support code
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 196
diff changeset
   766
    "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
   767
!
e9250da35d87 API: add method for importing Python support code
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 196
diff changeset
   768
e9250da35d87 API: add method for importing Python support code
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 196
diff changeset
   769
pythonSysPathAppend: directory
e9250da35d87 API: add method for importing Python support code
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 196
diff changeset
   770
    "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
   771
     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
   772
e9250da35d87 API: add method for importing Python support code
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 196
diff changeset
   773
    | dir |
e9250da35d87 API: add method for importing Python support code
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 196
diff changeset
   774
e9250da35d87 API: add method for importing Python support code
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 196
diff changeset
   775
    dir := directory asFilename.
e9250da35d87 API: add method for importing Python support code
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 196
diff changeset
   776
e9250da35d87 API: add method for importing Python support code
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 196
diff changeset
   777
    self assert: dir isDirectory.
e9250da35d87 API: add method for importing Python support code
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 196
diff changeset
   778
    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
   779
e9250da35d87 API: add method for importing Python support code
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 196
diff changeset
   780
    "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
   781
!
e9250da35d87 API: add method for importing Python support code
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 196
diff changeset
   782
250
545a1e6ab513 Add new convenience APIs in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 243
diff changeset
   783
quit
545a1e6ab513 Add new convenience APIs in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 243
diff changeset
   784
    self exit
545a1e6ab513 Add new convenience APIs in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 243
diff changeset
   785
545a1e6ab513 Add new convenience APIs in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 243
diff changeset
   786
    "Created: / 17-11-2021 / 16:50:51 / Jan Vrany <jan.vrany@labware.com>"
545a1e6ab513 Add new convenience APIs in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 243
diff changeset
   787
!
545a1e6ab513 Add new convenience APIs in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 243
diff changeset
   788
229
6b2f7b5c8ce7 Refactor `GDBDebugger >> selectThread:` and `#selectFrame:`
Jan Vrany <jan.vrany@labware.com>
parents: 223
diff changeset
   789
selectFrame: aGDBFrame 
104
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 102
diff changeset
   790
    "
229
6b2f7b5c8ce7 Refactor `GDBDebugger >> selectThread:` and `#selectFrame:`
Jan Vrany <jan.vrany@labware.com>
parents: 223
diff changeset
   791
     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
   792
     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
   793
     and so on."
6b2f7b5c8ce7 Refactor `GDBDebugger >> selectThread:` and `#selectFrame:`
Jan Vrany <jan.vrany@labware.com>
parents: 223
diff changeset
   794
6b2f7b5c8ce7 Refactor `GDBDebugger >> selectThread:` and `#selectFrame:`
Jan Vrany <jan.vrany@labware.com>
parents: 223
diff changeset
   795
    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
   796
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 102
diff changeset
   797
    "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
   798
    "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
   799
!
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 102
diff changeset
   800
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 102
diff changeset
   801
selectThread: aGDBThread
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 102
diff changeset
   802
    "
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 102
diff changeset
   803
    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
   804
    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
   805
    "
229
6b2f7b5c8ce7 Refactor `GDBDebugger >> selectThread:` and `#selectFrame:`
Jan Vrany <jan.vrany@labware.com>
parents: 223
diff changeset
   806
    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
   807
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 102
diff changeset
   808
    "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
   809
    "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
   810
!
6b2f7b5c8ce7 Refactor `GDBDebugger >> selectThread:` and `#selectFrame:`
Jan Vrany <jan.vrany@labware.com>
parents: 223
diff changeset
   811
6b2f7b5c8ce7 Refactor `GDBDebugger >> selectThread:` and `#selectFrame:`
Jan Vrany <jan.vrany@labware.com>
parents: 223
diff changeset
   812
selectThreadId: threadId frameId: frameId
6b2f7b5c8ce7 Refactor `GDBDebugger >> selectThread:` and `#selectFrame:`
Jan Vrany <jan.vrany@labware.com>
parents: 223
diff changeset
   813
    (selectedThread id ~= threadId or:[selectedFrame level ~= frameId]) ifTrue: [
6b2f7b5c8ce7 Refactor `GDBDebugger >> selectThread:` and `#selectFrame:`
Jan Vrany <jan.vrany@labware.com>
parents: 223
diff changeset
   814
        self send: (GDBMI_stack_select_frame new arguments: 
6b2f7b5c8ce7 Refactor `GDBDebugger >> selectThread:` and `#selectFrame:`
Jan Vrany <jan.vrany@labware.com>
parents: 223
diff changeset
   815
                        (Array with: '--thread' with: threadId
6b2f7b5c8ce7 Refactor `GDBDebugger >> selectThread:` and `#selectFrame:`
Jan Vrany <jan.vrany@labware.com>
parents: 223
diff changeset
   816
                               with: '--frame'  with: frameId
6b2f7b5c8ce7 Refactor `GDBDebugger >> selectThread:` and `#selectFrame:`
Jan Vrany <jan.vrany@labware.com>
parents: 223
diff changeset
   817
                               with: frameId))
6b2f7b5c8ce7 Refactor `GDBDebugger >> selectThread:` and `#selectFrame:`
Jan Vrany <jan.vrany@labware.com>
parents: 223
diff changeset
   818
           andWait: false
6b2f7b5c8ce7 Refactor `GDBDebugger >> selectThread:` and `#selectFrame:`
Jan Vrany <jan.vrany@labware.com>
parents: 223
diff changeset
   819
    ].
6b2f7b5c8ce7 Refactor `GDBDebugger >> selectThread:` and `#selectFrame:`
Jan Vrany <jan.vrany@labware.com>
parents: 223
diff changeset
   820
6b2f7b5c8ce7 Refactor `GDBDebugger >> selectThread:` and `#selectFrame:`
Jan Vrany <jan.vrany@labware.com>
parents: 223
diff changeset
   821
    "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
   822
!
8d7c075a06b9 API: added GDBDebugger >> #targetConnect:parameters:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 126
diff changeset
   823
169
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   824
setParameter:name to:value 
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   825
    "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
   826
     See `set` GDB command.
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   827
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   828
     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
   829
     when parameter value changes.
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   830
    "
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   831
    
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   832
    self assert:value isString.
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   833
    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
   834
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   835
    "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
   836
!
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
   837
128
8d7c075a06b9 API: added GDBDebugger >> #targetConnect:parameters:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 126
diff changeset
   838
targetConnect: type parameters: parameters
8d7c075a06b9 API: added GDBDebugger >> #targetConnect:parameters:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 126
diff changeset
   839
    "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
   840
     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
   841
     host names and the like.
8d7c075a06b9 API: added GDBDebugger >> #targetConnect:parameters:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 126
diff changeset
   842
8d7c075a06b9 API: added GDBDebugger >> #targetConnect:parameters:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 126
diff changeset
   843
     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
   844
    "
8d7c075a06b9 API: added GDBDebugger >> #targetConnect:parameters:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 126
diff changeset
   845
    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
   846
8d7c075a06b9 API: added GDBDebugger >> #targetConnect:parameters:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 126
diff changeset
   847
    "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
   848
! !
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   849
240
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   850
!GDBDebugger methodsFor:'commands - ULD / SmallRSP -like'!
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   851
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   852
c
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   853
    "Continue execution until debugee either terminates or
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   854
     stops (on breakpoint, trap or other condition)"
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   855
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   856
    ^ self send: 'continue' andWaitFor: GDBStoppedEvent , GDBThreadGroupExitedEvent
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   857
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   858
    "Created: / 10-09-2021 / 13:31:06 / Jan Vrany <jan.vrany@labware.com>"
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   859
!
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   860
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   861
getRegister: register
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   862
    "Return value of given register.
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   863
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   864
     This is simple ULD / SmallRSP -like API and expects that there's only
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   865
     one inferior with only one thread and that top-most frame (frame 0) is
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   866
     selected. If not, an error is thrown.
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   867
    "
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   868
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   869
     (self inferiors size ~~ 1
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   870
        or:[ self selectedInferior threads size ~~ 1
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   871
        or:[ self selectedFrame level ~~ 0 ] ]) ifTrue: [ self error:'Improper use' ].
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   872
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   873
    ^ self selectedFrame getRegister: register
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   874
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   875
    "Created: / 10-09-2021 / 15:04:28 / Jan Vrany <jan.vrany@labware.com>"
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   876
!
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   877
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   878
memoryAt: address count: numBytes
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   879
    "
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   880
    Read `numBytes` starting at `address` from debugee memory and return
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   881
    bytes (as ByteArray).
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   882
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   883
    This is simple ULD / SmallRSP -like API and expects that there's only
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   884
    one inferior. If not, an error is thrown.     
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   885
    "
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   886
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   887
    self inferiors size ~~ 1 ifTrue: [ self error:'Improper use' ].       
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   888
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   889
    ^ self selectedInferior memoryAt: address count: numBytes
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   890
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   891
    "Created: / 15-06-2020 / 11:51:27 / Jan Vrany <jan.vrany@labware.com>"
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   892
    "Modified: / 10-09-2021 / 15:08:59 / Jan Vrany <jan.vrany@labware.com>"
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   893
!
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   894
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   895
memoryAt: address put: bytes
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   896
    "
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   897
    Write `bytes` to debugee memory at address `address`. 
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   898
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   899
    This is simple ULD / SmallRSP -like API and expects that there's only
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   900
    one inferior. If not, an error is thrown.     
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   901
    "
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   902
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   903
    self inferiors size ~~ 1 ifTrue: [ self error:'Improper use' ].     
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   904
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   905
    self memoryAt: address put: bytes startingAt: 1 count: bytes size.
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   906
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   907
    "Created: / 15-06-2020 / 13:31:43 / Jan Vrany <jan.vrany@labware.com>"
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   908
!
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   909
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   910
memoryAt: address put: bytes startingAt: bytesOffset count: numBytes
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   911
    "
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   912
    Write `numBytes` starting at `byteOffset` from `bytes` to debugee memory at address `address`. 
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   913
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   914
    This is simple ULD / SmallRSP -like API and expects that there's only
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   915
    one inferior. If not, an error is thrown.     
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   916
    "
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   917
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   918
    self inferiors size ~~ 1 ifTrue: [ self error:'Improper use' ].     
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   919
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   920
    self selectedInferior memoryAt: address put: bytes startingAt: bytesOffset count: numBytes
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   921
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   922
    "Created: / 15-06-2020 / 13:02:17 / Jan Vrany <jan.vrany@labware.com>"
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   923
    "Modified: / 10-10-2021 / 19:43:34 / Jan Vrany <jan.vrany@labware.com>"
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   924
!
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   925
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   926
setRegister: register to: value
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   927
    "Set given register.
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   928
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   929
     This is simple ULD / SmallRSP -like API and expects that there's only
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   930
     one inferior with only one thread and that top-most frame (frame 0) is
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   931
     selected. If not, an error is thrown.
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   932
    "
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   933
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   934
     (self inferiors size ~~ 1
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   935
        or:[ self selectedInferior threads size ~~ 1
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   936
        or:[ self selectedFrame level ~~ 0 ] ]) ifTrue: [ self error:'Improper use' ].
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   937
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   938
    ^ self selectedFrame setRegister: register to: value
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   939
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   940
    "Created: / 10-09-2021 / 15:14:19 / Jan Vrany <jan.vrany@labware.com>"
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   941
! !
ca26df09063d Add (some) simple ULD / SmallRSP -like APIs to `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 236
diff changeset
   942
82
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
   943
!GDBDebugger methodsFor:'evaluating'!
64
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   944
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   945
do: block andWaitFor:eventHandlers
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   946
    "Evaluates a given block and then wait for events.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   947
     `eventHandlers`. 
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   948
     Params:
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   949
     `block`        block to evaluate
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   950
     `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
   951
                    of event classes or blocks.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   952
                    - 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
   953
                    - 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
   954
                      subclasses are handled too.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   955
                    - 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
   956
                    - 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
   957
     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
   958
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   959
    ^ self do: block andWaitFor: eventHandlers withTimeoutMs: nil
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   960
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   961
    "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
   962
    "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
   963
!
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   964
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   965
do: block andWaitFor:eventHandlers withTimeoutMs:timeout 
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   966
    "Evaluates a given block and then wait for events.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   967
     `eventHandlers`. Raise a TimeoutError if expected events don't arrive
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   968
     in specified time.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   969
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   970
     Params:
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   971
     `block`        block to evaluate
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   972
     `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
   973
                    of event classes or blocks.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   974
                    - 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
   975
                    - 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
   976
                      subclasses are handled too.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   977
                    - 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
   978
                    - 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
   979
     `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
   980
                    then wait for indefinitly
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   981
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   982
     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
   983
    
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   984
    | handlersArray handlerFinal eventsArray blocker |
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   985
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   986
    eventHandlers isNil ifTrue:[
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   987
        "/ Asynchronous send...
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   988
        self assert:timeout isNil.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   989
        block value.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   990
        ^ nil
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
   991
    ].
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
   992
    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
   993
        assert:Processor activeProcess ~~ connection eventDispatchProcess
304
0dd4d6bc9b90 Compatibility: use `#assert:description:` instead of `#assert:message:`
Jan Vrany <jan.vrany@labware.com>
parents: 302
diff changeset
   994
        description:'Cannot send commands from within event dispatching process. Would deadlock'.
236
e36e28215fd9 Allow to wait for muliple events
Jan Vrany <jan.vrany@labware.com>
parents: 235
diff changeset
   995
e36e28215fd9 Allow to wait for muliple events
Jan Vrany <jan.vrany@labware.com>
parents: 235
diff changeset
   996
    "/ Hack - AnnouncementClassCollection is strictly-speaking sequenceable but here we treat 
e36e28215fd9 Allow to wait for muliple events
Jan Vrany <jan.vrany@labware.com>
parents: 235
diff changeset
   997
    "/ it as a single handler handling multiple (unrelated) events.
e36e28215fd9 Allow to wait for muliple events
Jan Vrany <jan.vrany@labware.com>
parents: 235
diff changeset
   998
e36e28215fd9 Allow to wait for muliple events
Jan Vrany <jan.vrany@labware.com>
parents: 235
diff changeset
   999
    (eventHandlers isSequenceable and:[ eventHandlers class ~~ AnnouncementClassCollection ])
e36e28215fd9 Allow to wait for muliple events
Jan Vrany <jan.vrany@labware.com>
parents: 235
diff changeset
  1000
        ifTrue:[ handlersArray := Array withAll: eventHandlers ]
64
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
  1001
        ifFalse:[ handlersArray := Array with:eventHandlers ].
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
  1002
    eventsArray := Array new:handlersArray size.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
  1003
    1 to:handlersArray size do:[:i | 
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
  1004
        | handler |
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
  1005
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
  1006
        handler := handlersArray at:i.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
  1007
        handlersArray at:i
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
  1008
            put:[:event | 
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
  1009
                | matches |
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
  1010
236
e36e28215fd9 Allow to wait for muliple events
Jan Vrany <jan.vrany@labware.com>
parents: 235
diff changeset
  1011
                matches := handler isBlock ifTrue:[ handler value:event ] ifFalse:[ handler handles: event ].
64
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
  1012
                (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
  1013
                    eventsArray at:i put:event.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
  1014
                    self announcer unsubscribe:(handlersArray at:i).
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
  1015
                    i == handlersArray size ifTrue:[
235
51f916ee4111 Renamed `GDBEventSet` to `GDBEventSequence`
Jan Vrany <jan.vrany@labware.com>
parents: 231
diff changeset
  1016
                        connection eventAnnouncerInternal when: GDBEventSequenceProcessingFinished do: handlerFinal.
64
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
  1017
                    ].
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
  1018
                ].
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
  1019
            ].
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
  1020
        self announcer when:GDBEvent do:(handlersArray at:i).
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
  1021
    ].
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
  1022
    handlerFinal := [ :event | connection eventAnnouncerInternal unsubscribe: handlerFinal. blocker signal ].  
302
fdfe1a981363 Compatibility: allow ports to customize semaphore / mutex creation
Jan Vrany <jan.vrany@labware.com>
parents: 295
diff changeset
  1023
    blocker := GDBPortlib current newSemaphore.
64
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
  1024
    block value.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
  1025
    [
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
  1026
        (blocker waitWithTimeoutMs:timeout) isNil ifTrue:[
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
  1027
            eventsArray := nil.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
  1028
        ].
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
  1029
    ] ensure:[
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
  1030
        handlersArray do:[:handler | 
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
  1031
            handler notNil ifTrue:[
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
  1032
                self announcer unsubscribe:handler
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
  1033
            ]
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
  1034
        ].
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
  1035
    ].
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
  1036
    eventsArray isNil ifTrue:[
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
  1037
        (TimeoutError newException)
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
  1038
            parameter:timeout;
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
  1039
            raise.
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
  1040
    ].
236
e36e28215fd9 Allow to wait for muliple events
Jan Vrany <jan.vrany@labware.com>
parents: 235
diff changeset
  1041
    ^ (eventHandlers isSequenceable and:[ eventHandlers class ~~ AnnouncementClassCollection ])
e36e28215fd9 Allow to wait for muliple events
Jan Vrany <jan.vrany@labware.com>
parents: 235
diff changeset
  1042
        ifTrue:[ eventsArray ] ifFalse:[ eventsArray first ]
64
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
  1043
ed6b45e838b7 To fold
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 56
diff changeset
  1044
    "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
  1045
    "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
  1046
    "Modified (format): / 03-10-2018 / 12:58:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
304
0dd4d6bc9b90 Compatibility: use `#assert:description:` instead of `#assert:message:`
Jan Vrany <jan.vrany@labware.com>
parents: 302
diff changeset
  1047
    "Modified: / 21-08-2023 / 20:24:44 / 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
  1048
! !
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
  1049
21
83395ca8b257 Renamed GDB to GDBDebugger
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
  1050
!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
  1051
87
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
  1052
onBreakpointCreatedEvent: aGDBBreakpointCreatedEvent
120
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
  1053
    | breakpoint |
87
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
  1054
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
  1055
    breakpoints isNil ifTrue:[ 
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
  1056
        breakpoints := List new.
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
  1057
    ].
120
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
  1058
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
  1059
    "/ 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
  1060
    "/ 
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
  1061
    "/.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
  1062
    "/ 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
  1063
    "/ 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
  1064
    "/ for each location.
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
  1065
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
  1066
    breakpoint := aGDBBreakpointCreatedEvent breakpoints first.
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
  1067
    aGDBBreakpointCreatedEvent breakpoints size > 1 ifTrue:[ 
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
  1068
        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
  1069
    ].
120
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
  1070
    breakpoint setDebugger: self.    
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
  1071
    breakpoints add: breakpoint.
87
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
  1072
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
  1073
    "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
  1074
    "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
  1075
!
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
  1076
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
  1077
onBreakpointDeletedEvent: aGDBBreakpointDeletedEvent
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
  1078
    | breakpoint |
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
  1079
120
73877848ea7f Added support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
  1080
    breakpoint := self breakpointForId: aGDBBreakpointDeletedEvent id.
87
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
  1081
    breakpoint setDebugger: nil.
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
  1082
    breakpoints remove: breakpoint.
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
  1083
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
  1084
    "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
  1085
    "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
  1086
!
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
  1087
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
  1088
onBreakpointModifiedEvent: aGDBBreakpointModifiedEvent
89
ba62d486014f Initial support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 88
diff changeset
  1089
    aGDBBreakpointModifiedEvent breakpoints do:[:new | 
ba62d486014f Initial support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 88
diff changeset
  1090
        | old |    
87
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
  1091
175
a04e1a36e888 Fix for multi-location breakpoints created initially as pending
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
  1092
        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
  1093
        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
  1094
            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
  1095
                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
  1096
            ] ifFalse:[ 
dcadeaddd0c8 Update (internal) list of breakpoints when creating / modifying / deleting using MI commands
Jan Vrany <jan.vrany@labware.com>
parents: 229
diff changeset
  1097
                "/ 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
  1098
                "/ 
dcadeaddd0c8 Update (internal) list of breakpoints when creating / modifying / deleting using MI commands
Jan Vrany <jan.vrany@labware.com>
parents: 229
diff changeset
  1099
                "/.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
  1100
                "/ 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
  1101
                "/ 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
  1102
                "/ 
dcadeaddd0c8 Update (internal) list of breakpoints when creating / modifying / deleting using MI commands
Jan Vrany <jan.vrany@labware.com>
parents: 229
diff changeset
  1103
                "/ 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
  1104
                "/ 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
  1105
                "/ =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
  1106
                "/ 
dcadeaddd0c8 Update (internal) list of breakpoints when creating / modifying / deleting using MI commands
Jan Vrany <jan.vrany@labware.com>
parents: 229
diff changeset
  1107
                "/ 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
  1108
                "/ locations.
175
a04e1a36e888 Fix for multi-location breakpoints created initially as pending
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
  1109
231
dcadeaddd0c8 Update (internal) list of breakpoints when creating / modifying / deleting using MI commands
Jan Vrany <jan.vrany@labware.com>
parents: 229
diff changeset
  1110
                | dot |
175
a04e1a36e888 Fix for multi-location breakpoints created initially as pending
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
  1111
231
dcadeaddd0c8 Update (internal) list of breakpoints when creating / modifying / deleting using MI commands
Jan Vrany <jan.vrany@labware.com>
parents: 229
diff changeset
  1112
                "/ 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
  1113
                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
  1114
                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
  1115
                    | bpt |    
175
a04e1a36e888 Fix for multi-location breakpoints created initially as pending
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
  1116
274
806d4e9ad4f1 Compatibility: replace `#copyTo:` with `#copyFrom:to:`
Jan Vrany <jan.vrany@labware.com>
parents: 272
diff changeset
  1117
                    bpt := self breakpointForId: (new number copyFrom: 1 to: dot - 1).
231
dcadeaddd0c8 Update (internal) list of breakpoints when creating / modifying / deleting using MI commands
Jan Vrany <jan.vrany@labware.com>
parents: 229
diff changeset
  1118
                    "/ 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
  1119
                    (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
  1120
                        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
  1121
                    ] ifFalse:[ 
dcadeaddd0c8 Update (internal) list of breakpoints when creating / modifying / deleting using MI commands
Jan Vrany <jan.vrany@labware.com>
parents: 229
diff changeset
  1122
                        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
  1123
                    ].
175
a04e1a36e888 Fix for multi-location breakpoints created initially as pending
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
  1124
                ].
a04e1a36e888 Fix for multi-location breakpoints created initially as pending
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
  1125
            ].
a04e1a36e888 Fix for multi-location breakpoints created initially as pending
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
  1126
        ].
89
ba62d486014f Initial support for breakpoints with multiple locations
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 88
diff changeset
  1127
    ].
87
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
  1128
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
  1129
    "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
  1130
    "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
  1131
    "Modified: / 07-02-2019 / 15:14:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
274
806d4e9ad4f1 Compatibility: replace `#copyTo:` with `#copyFrom:to:`
Jan Vrany <jan.vrany@labware.com>
parents: 272
diff changeset
  1132
    "Modified: / 12-07-2023 / 15:30:21 / Jan Vrany <jan.vrany@labware.com>"
87
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
  1133
!
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
  1134
114
be5bdaecb9b3 API: added methods for querying source directories
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
  1135
onCmdParamChangedEvent: aGDBCmdParamChangedEvent
be5bdaecb9b3 API: added methods for querying source directories
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
  1136
    (aGDBCmdParamChangedEvent name = 'directories') ifTrue:[ 
be5bdaecb9b3 API: added methods for querying source directories
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
  1137
        directories := nil.
be5bdaecb9b3 API: added methods for querying source directories
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
  1138
    ].
be5bdaecb9b3 API: added methods for querying source directories
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
  1139
be5bdaecb9b3 API: added methods for querying source directories
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
  1140
    "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
  1141
!
be5bdaecb9b3 API: added methods for querying source directories
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
  1142
222
2c06fc7c39f5 Add command pre-execute and post-executehook
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
  1143
onCommandEvent:aGDBCommandEvent
2c06fc7c39f5 Add command pre-execute and post-executehook
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
  1144
    | command |
2c06fc7c39f5 Add command pre-execute and post-executehook
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
  1145
    command := aGDBCommandEvent command.
2c06fc7c39f5 Add command pre-execute and post-executehook
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
  1146
    command notNil ifTrue: [
2c06fc7c39f5 Add command pre-execute and post-executehook
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
  1147
        command preExecuteIn: self.
2c06fc7c39f5 Add command pre-execute and post-executehook
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
  1148
    ].
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1149
    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
  1150
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1151
    "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
  1152
    "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
  1153
    "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
  1154
!
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1155
222
2c06fc7c39f5 Add command pre-execute and post-executehook
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
  1156
onCommandResultEvent: aGDBCommandResultEvent 
2c06fc7c39f5 Add command pre-execute and post-executehook
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
  1157
    | result  command |
169
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
  1158
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
  1159
    result := aGDBCommandResultEvent result.
222
2c06fc7c39f5 Add command pre-execute and post-executehook
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
  1160
    command := result command.
2c06fc7c39f5 Add command pre-execute and post-executehook
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
  1161
    command notNil ifTrue: [
2c06fc7c39f5 Add command pre-execute and post-executehook
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
  1162
        command postExecuteIn: self result: aGDBCommandResultEvent result.
2c06fc7c39f5 Add command pre-execute and post-executehook
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
  1163
    ]
169
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
  1164
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
  1165
    "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
  1166
    "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
  1167
    "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
  1168
!
a3d1f59e3bfd API: add `GDBDebugger >> getParameter:` and `setParameter:to:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 166
diff changeset
  1169
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1170
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
  1171
    self release.
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
  1172
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
  1173
    "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
  1174
    "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
  1175
!
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
  1176
252
33477ae8320e Emit `=memory-changed` event after setting memory via MI
Jan Vrany <jan.vrany@labware.com>
parents: 251
diff changeset
  1177
onMemoryChangedEvent:aGDBMemoryChangedEvent
33477ae8320e Emit `=memory-changed` event after setting memory via MI
Jan Vrany <jan.vrany@labware.com>
parents: 251
diff changeset
  1178
    | inferior |
33477ae8320e Emit `=memory-changed` event after setting memory via MI
Jan Vrany <jan.vrany@labware.com>
parents: 251
diff changeset
  1179
33477ae8320e Emit `=memory-changed` event after setting memory via MI
Jan Vrany <jan.vrany@labware.com>
parents: 251
diff changeset
  1180
    inferior := self inferiorForId:aGDBMemoryChangedEvent threadGroupId.
33477ae8320e Emit `=memory-changed` event after setting memory via MI
Jan Vrany <jan.vrany@labware.com>
parents: 251
diff changeset
  1181
    aGDBMemoryChangedEvent setThreadGroup:inferior.
33477ae8320e Emit `=memory-changed` event after setting memory via MI
Jan Vrany <jan.vrany@labware.com>
parents: 251
diff changeset
  1182
33477ae8320e Emit `=memory-changed` event after setting memory via MI
Jan Vrany <jan.vrany@labware.com>
parents: 251
diff changeset
  1183
    "Created: / 18-11-2021 / 23:10:21 / Jan Vrany <jan.vrany@labware.com>"
33477ae8320e Emit `=memory-changed` event after setting memory via MI
Jan Vrany <jan.vrany@labware.com>
parents: 251
diff changeset
  1184
!
33477ae8320e Emit `=memory-changed` event after setting memory via MI
Jan Vrany <jan.vrany@labware.com>
parents: 251
diff changeset
  1185
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1186
onRunningEvent: aGDBRunningEvent
38
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1187
    | threads threadId |
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1188
72
eb4eea3ebf4c Increate sequence number also when thread or thread group is stopped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
  1189
    self nextInferiorStateSequnceNumber.        
38
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1190
    threadId := aGDBRunningEvent threadId.
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1191
    threadId = 'all' ifFalse:[ 
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1192
        threadId := threadId asInteger.
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1193
    ].
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1194
    threads := Set new.
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1195
    inferiors do:[:inferior | 
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1196
        inferior threads do:[:thread | 
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1197
            (threadId isString or:[thread id = threadId]) ifTrue:[ 
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1198
                threads add: thread.
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1199
            ].
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1200
        ].
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1201
    ].
86
7f53d51a0a65 Cache thread status and update it on `=stopped` and `=running` events
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
  1202
    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
  1203
    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
  1204
        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
  1205
    ].
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1206
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1207
    "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
  1208
    "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
  1209
!
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1210
38
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1211
onStoppedEvent: aGDBStoppedEvent
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1212
    | threads threadIds |
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1213
72
eb4eea3ebf4c Increate sequence number also when thread or thread group is stopped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
  1214
    self nextInferiorStateSequnceNumber.  
38
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1215
    threadIds := aGDBStoppedEvent stoppedThreadIds.
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1216
    threadIds = 'all' ifFalse:[ 
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1217
        threadIds := threadIds collect:[:e | e asInteger ].
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1218
    ].
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1219
    threads := Set new.
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1220
    inferiors do:[:inferior | 
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1221
        inferior threads do:[:thread | 
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1222
            (threadIds isString or:[threadIds includes: thread id]) ifTrue:[ 
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1223
                threads add: thread.
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1224
            ].
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1225
        ].
c9eaa506824b More work on GDBThreadStatus
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
  1226
    ].
86
7f53d51a0a65 Cache thread status and update it on `=stopped` and `=running` events
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
  1227
    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
  1228
    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
  1229
        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
  1230
    ].
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1231
116
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1232
    "/ Initialize target features properly
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1233
    targetFeatures isNil ifTrue:[
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1234
        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
  1235
             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
  1236
    ].
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1237
253
df95df6c8546 Care for `GDBStoppedEvent >> #frame` returning `nil`
Jan Vrany <jan.vrany@labware.com>
parents: 252
diff changeset
  1238
    "/ Carefull - not all stop events have frame, for example
df95df6c8546 Care for `GDBStoppedEvent >> #frame` returning `nil`
Jan Vrany <jan.vrany@labware.com>
parents: 252
diff changeset
  1239
    "/ solib-events have not!!
df95df6c8546 Care for `GDBStoppedEvent >> #frame` returning `nil`
Jan Vrany <jan.vrany@labware.com>
parents: 252
diff changeset
  1240
    aGDBStoppedEvent frame notNil ifTrue:[
df95df6c8546 Care for `GDBStoppedEvent >> #frame` returning `nil`
Jan Vrany <jan.vrany@labware.com>
parents: 252
diff changeset
  1241
        self selectedThread: aGDBStoppedEvent stoppedThread frame: aGDBStoppedEvent frame
df95df6c8546 Care for `GDBStoppedEvent >> #frame` returning `nil`
Jan Vrany <jan.vrany@labware.com>
parents: 252
diff changeset
  1242
    ].
223
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
  1243
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1244
    "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
  1245
    "Modified: / 09-04-2018 / 15:42:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
253
df95df6c8546 Care for `GDBStoppedEvent >> #frame` returning `nil`
Jan Vrany <jan.vrany@labware.com>
parents: 252
diff changeset
  1246
    "Modified: / 02-12-2021 / 13:55:30 / 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
  1247
!
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1248
172
836209352efb Update target features from `=target-connected event`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 170
diff changeset
  1249
onTargetConnectedEvent: aGDBTargetConnectedEvent
836209352efb Update target features from `=target-connected event`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 170
diff changeset
  1250
    targetFeatures := aGDBTargetConnectedEvent features
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
    "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
  1253
!
836209352efb Update target features from `=target-connected event`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 170
diff changeset
  1254
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1255
onThreadCreatedEvent:aGDBThreadCreatedEvent 
36
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
  1256
    | inferior |
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
  1257
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1258
    inferior := self inferiorForId:aGDBThreadCreatedEvent threadGroupId.
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1259
    inferior onThreadCreatedEvent:aGDBThreadCreatedEvent.
36
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
  1260
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
  1261
    "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
  1262
!
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
  1263
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1264
onThreadExitedEvent:aGDBThreadExitedEvent 
36
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
  1265
    | inferior |
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
  1266
72
eb4eea3ebf4c Increate sequence number also when thread or thread group is stopped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
  1267
    self nextInferiorStateSequnceNumber.  
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1268
    inferior := self inferiorForId:aGDBThreadExitedEvent threadGroupId.
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1269
    inferior onThreadExitedEvent:aGDBThreadExitedEvent.
36
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
  1270
116
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1271
    "/ reset target features
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1272
    targetFeatures := nil.
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1273
36
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
  1274
    "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
  1275
    "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
  1276
!
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
  1277
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1278
onThreadGroupAddedEvent:aGDBThreadGroupAddedEvent 
35
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
  1279
    | inferior |
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1280
35
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
  1281
    inferiors isNil ifTrue:[
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
  1282
        inferiors := List new.
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
  1283
    ].
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1284
    inferior := GDBThreadGroup newWithDebugger:self
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1285
            id:aGDBThreadGroupAddedEvent threadGroupId.
35
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
  1286
    inferiors add:inferior.
116
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1287
    aGDBThreadGroupAddedEvent setThreadGroup:inferior.
35
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
  1288
116
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1289
    "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
  1290
    "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
  1291
!
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
  1292
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1293
onThreadGroupExitedEvent:aGDBThreadGroupExitedEvent 
35
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
  1294
    | inferior |
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
  1295
72
eb4eea3ebf4c Increate sequence number also when thread or thread group is stopped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
  1296
    self nextInferiorStateSequnceNumber.        
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1297
    inferior := self inferiorForId:aGDBThreadGroupExitedEvent threadGroupId.
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1298
    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
  1299
    aGDBThreadGroupExitedEvent setThreadGroup:inferior.
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
  1300
    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
  1301
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
  1302
    "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
  1303
    "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
  1304
    "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
  1305
!
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
  1306
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1307
onThreadGroupStartedEvent:aGDBThreadGroupStartedEvent 
35
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
  1308
    | inferior |
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
  1309
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1310
    inferior := self inferiorForId:aGDBThreadGroupStartedEvent threadGroupId.
144
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 129
diff changeset
  1311
    inferior reset.
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1312
    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
  1313
    aGDBThreadGroupStartedEvent setThreadGroup:inferior.
35
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
  1314
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
  1315
    "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
  1316
    "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
  1317
    "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
  1318
!
661e16236c67 Set `GDBThreadSelectedEvent`'s thread and frame
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 128
diff changeset
  1319
661e16236c67 Set `GDBThreadSelectedEvent`'s thread and frame
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 128
diff changeset
  1320
onThreadSelectedEvent: aGDBThreadSelectedEvent 
220
372b64967435 Minor cleanup of handling of `=thread-selected` event
Jan Vrany <jan.vrany@labware.com>
parents: 219
diff changeset
  1321
    | thread |
129
661e16236c67 Set `GDBThreadSelectedEvent`'s thread and frame
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 128
diff changeset
  1322
220
372b64967435 Minor cleanup of handling of `=thread-selected` event
Jan Vrany <jan.vrany@labware.com>
parents: 219
diff changeset
  1323
    thread := self threadForId: aGDBThreadSelectedEvent threadId.
372b64967435 Minor cleanup of handling of `=thread-selected` event
Jan Vrany <jan.vrany@labware.com>
parents: 219
diff changeset
  1324
    thread onThreadSelectedEvent:aGDBThreadSelectedEvent.
129
661e16236c67 Set `GDBThreadSelectedEvent`'s thread and frame
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 128
diff changeset
  1325
223
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 222
diff changeset
  1326
    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
  1327
129
661e16236c67 Set `GDBThreadSelectedEvent`'s thread and frame
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 128
diff changeset
  1328
    "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
  1329
    "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
  1330
! !
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
  1331
21
83395ca8b257 Renamed GDB to GDBDebugger
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
  1332
!GDBDebugger methodsFor:'finalization'!
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1333
286
d22bc8f82f88 Compatibility: refactor finalization of debuggers and variable objects
Jan Vrany <jan.vrany@labware.com>
parents: 274
diff changeset
  1334
finalizationLobby
d22bc8f82f88 Compatibility: refactor finalization of debuggers and variable objects
Jan Vrany <jan.vrany@labware.com>
parents: 274
diff changeset
  1335
    ^ FinalizationLobby
d22bc8f82f88 Compatibility: refactor finalization of debuggers and variable objects
Jan Vrany <jan.vrany@labware.com>
parents: 274
diff changeset
  1336
d22bc8f82f88 Compatibility: refactor finalization of debuggers and variable objects
Jan Vrany <jan.vrany@labware.com>
parents: 274
diff changeset
  1337
    "Created: / 14-07-2023 / 13:35:31 / Jan Vrany <jan.vrany@labware.com>"
d22bc8f82f88 Compatibility: refactor finalization of debuggers and variable objects
Jan Vrany <jan.vrany@labware.com>
parents: 274
diff changeset
  1338
!
d22bc8f82f88 Compatibility: refactor finalization of debuggers and variable objects
Jan Vrany <jan.vrany@labware.com>
parents: 274
diff changeset
  1339
d22bc8f82f88 Compatibility: refactor finalization of debuggers and variable objects
Jan Vrany <jan.vrany@labware.com>
parents: 274
diff changeset
  1340
finalizationRegistry
d22bc8f82f88 Compatibility: refactor finalization of debuggers and variable objects
Jan Vrany <jan.vrany@labware.com>
parents: 274
diff changeset
  1341
    "For Pharo compatibility"
d22bc8f82f88 Compatibility: refactor finalization of debuggers and variable objects
Jan Vrany <jan.vrany@labware.com>
parents: 274
diff changeset
  1342
    ^ self finalizationLobby
d22bc8f82f88 Compatibility: refactor finalization of debuggers and variable objects
Jan Vrany <jan.vrany@labware.com>
parents: 274
diff changeset
  1343
d22bc8f82f88 Compatibility: refactor finalization of debuggers and variable objects
Jan Vrany <jan.vrany@labware.com>
parents: 274
diff changeset
  1344
    "Modified (comment): / 14-07-2023 / 13:36:22 / Jan Vrany <jan.vrany@labware.com>"
d22bc8f82f88 Compatibility: refactor finalization of debuggers and variable objects
Jan Vrany <jan.vrany@labware.com>
parents: 274
diff changeset
  1345
!
d22bc8f82f88 Compatibility: refactor finalization of debuggers and variable objects
Jan Vrany <jan.vrany@labware.com>
parents: 274
diff changeset
  1346
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1347
finalize
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1348
    self release.
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1349
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1350
    "Created: / 26-05-2014 / 21:23:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
286
d22bc8f82f88 Compatibility: refactor finalization of debuggers and variable objects
Jan Vrany <jan.vrany@labware.com>
parents: 274
diff changeset
  1351
!
d22bc8f82f88 Compatibility: refactor finalization of debuggers and variable objects
Jan Vrany <jan.vrany@labware.com>
parents: 274
diff changeset
  1352
d22bc8f82f88 Compatibility: refactor finalization of debuggers and variable objects
Jan Vrany <jan.vrany@labware.com>
parents: 274
diff changeset
  1353
registerForFinalization
d22bc8f82f88 Compatibility: refactor finalization of debuggers and variable objects
Jan Vrany <jan.vrany@labware.com>
parents: 274
diff changeset
  1354
    Smalltalk isSmalltalkX ifTrue: [ 
d22bc8f82f88 Compatibility: refactor finalization of debuggers and variable objects
Jan Vrany <jan.vrany@labware.com>
parents: 274
diff changeset
  1355
        super registerForFinalization.
d22bc8f82f88 Compatibility: refactor finalization of debuggers and variable objects
Jan Vrany <jan.vrany@labware.com>
parents: 274
diff changeset
  1356
        ^ self.
d22bc8f82f88 Compatibility: refactor finalization of debuggers and variable objects
Jan Vrany <jan.vrany@labware.com>
parents: 274
diff changeset
  1357
    ].
d22bc8f82f88 Compatibility: refactor finalization of debuggers and variable objects
Jan Vrany <jan.vrany@labware.com>
parents: 274
diff changeset
  1358
    Smalltalk isPharo ifTrue: [ 
d22bc8f82f88 Compatibility: refactor finalization of debuggers and variable objects
Jan Vrany <jan.vrany@labware.com>
parents: 274
diff changeset
  1359
        self finalizationRegistry add: self.
d22bc8f82f88 Compatibility: refactor finalization of debuggers and variable objects
Jan Vrany <jan.vrany@labware.com>
parents: 274
diff changeset
  1360
        ^ self.
d22bc8f82f88 Compatibility: refactor finalization of debuggers and variable objects
Jan Vrany <jan.vrany@labware.com>
parents: 274
diff changeset
  1361
    ].
d22bc8f82f88 Compatibility: refactor finalization of debuggers and variable objects
Jan Vrany <jan.vrany@labware.com>
parents: 274
diff changeset
  1362
    self error: 'Unsupported dialect'
d22bc8f82f88 Compatibility: refactor finalization of debuggers and variable objects
Jan Vrany <jan.vrany@labware.com>
parents: 274
diff changeset
  1363
d22bc8f82f88 Compatibility: refactor finalization of debuggers and variable objects
Jan Vrany <jan.vrany@labware.com>
parents: 274
diff changeset
  1364
    "Created: / 14-07-2023 / 13:40:51 / Jan Vrany <jan.vrany@labware.com>"
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1365
! !
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1366
21
83395ca8b257 Renamed GDB to GDBDebugger
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
  1367
!GDBDebugger methodsFor:'initialize & release'!
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1368
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1369
initializeWithProcess: aGDBProcess
116
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1370
    | result |
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1371
1
da21f8614c2d Fixes in GDBLauncher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
  1372
    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
  1373
d573a3b2abe2 Variable objects: delete var. objects that are no longer needed
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 97
diff changeset
  1374
    finalizationRegistry := Registry new.
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1375
    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
  1376
    connection setDebugger: self.
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1377
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
  1378
    commandSequenceNumber := 0.
19
c48d33e27d34 Added internal announcer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 12
diff changeset
  1379
    inferiorStateSequenceNumber := 0.
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
  1380
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1381
    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
  1382
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1383
    connection eventPumpStart.
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1384
    connection eventDispatchStart.
292
d4b3ddeda08d Compatibility: do not use `Delay waitForMilliseconds: x`
Jan Vrany <jan.vrany@labware.com>
parents: 286
diff changeset
  1385
    (Delay forMilliseconds: 100) wait.  
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
  1386
95
f417138e9c48 Win32: initial support for Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 93
diff changeset
  1387
    connection inferiorPTY notNil ifTrue:[
f417138e9c48 Win32: initial support for Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 93
diff changeset
  1388
        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
  1389
    ].
217
011d65a54cc5 Backed out changeset 0509fe9ad879
Jan Vrany <jan.vrany@labware.com>
parents: 200
diff changeset
  1390
    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
  1391
116
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1392
    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
  1393
    debuggerFeatures := result propertyAt: #features.
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1394
    targetFeatures := nil.
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1395
82
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
  1396
    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
  1397
    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
  1398
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1399
    "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
  1400
    "Modified: / 26-03-2018 / 21:36:31 / jv"
217
011d65a54cc5 Backed out changeset 0509fe9ad879
Jan Vrany <jan.vrany@labware.com>
parents: 200
diff changeset
  1401
    "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
  1402
    "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
  1403
!
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1404
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1405
release
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1406
    connection notNil ifTrue:[ 
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1407
        self unsubscribe.
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1408
        connection release.
250
545a1e6ab513 Add new convenience APIs in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 243
diff changeset
  1409
        self propertyAt: #trace put: connection trace.
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1410
        connection := nil.
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1411
    ].
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1412
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1413
    "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
  1414
    "Modified: / 20-06-2014 / 22:08:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
250
545a1e6ab513 Add new convenience APIs in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 243
diff changeset
  1415
    "Modified: / 17-11-2021 / 15:52:41 / 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
  1416
!
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1417
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1418
subscribe
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1419
    connection eventAnnouncerInternal
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1420
        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
  1421
        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
  1422
        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
  1423
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1424
        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
  1425
        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
  1426
        when: GDBThreadGroupExitedEvent     send: #onThreadGroupExitedEvent: to: self;
36
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
  1427
252
33477ae8320e Emit `=memory-changed` event after setting memory via MI
Jan Vrany <jan.vrany@labware.com>
parents: 251
diff changeset
  1428
        when: GDBMemoryChangedEvent         send: #onMemoryChangedEvent:      to: self;
33477ae8320e Emit `=memory-changed` event after setting memory via MI
Jan Vrany <jan.vrany@labware.com>
parents: 251
diff changeset
  1429
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1430
        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
  1431
        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
  1432
129
661e16236c67 Set `GDBThreadSelectedEvent`'s thread and frame
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 128
diff changeset
  1433
        when: GDBThreadSelectedEvent        send: #onThreadSelectedEvent:     to: self;
661e16236c67 Set `GDBThreadSelectedEvent`'s thread and frame
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 128
diff changeset
  1434
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
  1435
        when: GDBRunningEvent               send: #onRunningEvent:            to: self;
87
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
  1436
        when: GDBStoppedEvent               send: #onStoppedEvent:            to: self;
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
  1437
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
  1438
        when: GDBBreakpointCreatedEvent     send: #onBreakpointCreatedEvent:  to: self;
50e80d25ea6f Added initial support for breakppints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
  1439
        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
  1440
        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
  1441
172
836209352efb Update target features from `=target-connected event`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 170
diff changeset
  1442
        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
  1443
836209352efb Update target features from `=target-connected event`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 170
diff changeset
  1444
        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
  1445
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1446
    "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
  1447
    "Modified: / 22-01-2019 / 13:36:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
252
33477ae8320e Emit `=memory-changed` event after setting memory via MI
Jan Vrany <jan.vrany@labware.com>
parents: 251
diff changeset
  1448
    "Modified: / 18-11-2021 / 23:11:08 / 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
  1449
!
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1450
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1451
unsubscribe
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1452
    connection eventAnnouncerInternal unsubscribe: self
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1453
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1454
    "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
  1455
! !
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1456
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
  1457
!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
  1458
c4f07d0e7b7a GNI/MI: added custom inspector view for viewing GDB/MI comminicatication trace
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
  1459
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
  1460
    <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
  1461
    ^ (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
  1462
        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
  1463
        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
  1464
        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
  1465
        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
  1466
c4f07d0e7b7a GNI/MI: added custom inspector view for viewing GDB/MI comminicatication trace
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
  1467
    "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
  1468
! !
c4f07d0e7b7a GNI/MI: added custom inspector view for viewing GDB/MI comminicatication trace
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
  1469
111
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1470
!GDBDebugger methodsFor:'queries'!
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1471
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
  1472
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
  1473
    "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
  1474
780e1f6168c5 Add new API `GDBDebugger >> #hasCommand:` to test support for particular MI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
  1475
     `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
  1476
     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
  1477
780e1f6168c5 Add new API `GDBDebugger >> #hasCommand:` to test support for particular MI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
  1478
     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
  1479
     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
  1480
    "
780e1f6168c5 Add new API `GDBDebugger >> #hasCommand:` to test support for particular MI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
  1481
    | 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
  1482
780e1f6168c5 Add new API `GDBDebugger >> #hasCommand:` to test support for particular MI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
  1483
    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
  1484
    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
  1485
        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
  1486
        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
  1487
    ] 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
  1488
        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
  1489
    ].
780e1f6168c5 Add new API `GDBDebugger >> #hasCommand:` to test support for particular MI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
  1490
    ^ 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
  1491
        | 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
  1492
780e1f6168c5 Add new API `GDBDebugger >> #hasCommand:` to test support for particular MI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
  1493
        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
  1494
        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
  1495
        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
  1496
    ].
780e1f6168c5 Add new API `GDBDebugger >> #hasCommand:` to test support for particular MI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
  1497
780e1f6168c5 Add new API `GDBDebugger >> #hasCommand:` to test support for particular MI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
  1498
    "
780e1f6168c5 Add new API `GDBDebugger >> #hasCommand:` to test support for particular MI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
  1499
    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
  1500
    "
780e1f6168c5 Add new API `GDBDebugger >> #hasCommand:` to test support for particular MI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
  1501
780e1f6168c5 Add new API `GDBDebugger >> #hasCommand:` to test support for particular MI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
  1502
    "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
  1503
!
780e1f6168c5 Add new API `GDBDebugger >> #hasCommand:` to test support for particular MI command
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
  1504
111
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1505
hasFeature: feature
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1506
    "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
  1507
     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
  1508
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1509
     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
  1510
    "
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1511
    ^ 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
  1512
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1513
    "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
  1514
    "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
  1515
!
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1516
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1517
hasFeatureAsync
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1518
    "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
  1519
     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
  1520
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1521
    targetFeatures notNil ifTrue:[ 
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1522
        ^ targetFeatures includes: 'async'
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1523
    ] ifFalse:[ 
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1524
        ^ connection nativeTargetFeatures includes: 'async'.
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1525
    ].
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1526
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
  1527
    "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
  1528
!
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1529
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1530
hasPendingCommands
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1531
    "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
  1532
     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
  1533
     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
  1534
     to be dispatched.
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1535
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1536
     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
  1537
     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
  1538
     it. Use with caution!!
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1539
    "
250
545a1e6ab513 Add new convenience APIs in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 243
diff changeset
  1540
    ^ connection notNil and:[ connection hasPendingCommands ]
170
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1541
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1542
    "Created: / 23-01-2019 / 20:41:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
250
545a1e6ab513 Add new convenience APIs in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 243
diff changeset
  1543
    "Modified: / 17-11-2021 / 16:10:35 / Jan Vrany <jan.vrany@labware.com>"
170
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1544
!
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1545
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1546
hasPendingEvents
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1547
    "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
  1548
     to be dispatched, `false` otherwise.
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1549
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1550
     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
  1551
     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
  1552
     it. Use with caution!!
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1553
    "
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1554
    ^ connection hasPendingEvents
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1555
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1556
    "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
  1557
!
cd22cacfcdcb API: temporarily add `GDBDebugger >> nativeTargetHasFeature:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 175
diff changeset
  1558
cd22cacfcdcb API: temporarily add `GDBDebugger >> nativeTargetHasFeature:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 175
diff changeset
  1559
nativeTargetHasFeature: aString
cd22cacfcdcb API: temporarily add `GDBDebugger >> nativeTargetHasFeature:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 175
diff changeset
  1560
    ^ connection nativeTargetFeatures includes:  aString
cd22cacfcdcb API: temporarily add `GDBDebugger >> nativeTargetHasFeature:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 175
diff changeset
  1561
cd22cacfcdcb API: temporarily add `GDBDebugger >> nativeTargetHasFeature:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 175
diff changeset
  1562
    "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
  1563
!
cd22cacfcdcb API: temporarily add `GDBDebugger >> nativeTargetHasFeature:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 175
diff changeset
  1564
cd22cacfcdcb API: temporarily add `GDBDebugger >> nativeTargetHasFeature:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 175
diff changeset
  1565
nativeTargetHasFeatureAsync
cd22cacfcdcb API: temporarily add `GDBDebugger >> nativeTargetHasFeature:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 175
diff changeset
  1566
    ^ self nativeTargetHasFeature: 'async'
cd22cacfcdcb API: temporarily add `GDBDebugger >> nativeTargetHasFeature:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 175
diff changeset
  1567
cd22cacfcdcb API: temporarily add `GDBDebugger >> nativeTargetHasFeature:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 175
diff changeset
  1568
    "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
  1569
! !
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1570
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1571
!GDBDebugger methodsFor:'testing'!
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1572
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1573
isConnected
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1574
    ^ connection notNil
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1575
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
  1576
    "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
  1577
!
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
  1578
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
  1579
isFrameFiltersEnabled
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
  1580
    ^ frameFiltersEnabled
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
  1581
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
  1582
    "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
  1583
!
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
  1584
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
  1585
isPrettyPrintingEnabled
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
  1586
    ^ prettyPrintingEnabled
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
  1587
7ee72b7a498f Added #enablePrettyPrinting and #enableFrameFilters to allow Python scripts to augment presentation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 80
diff changeset
  1588
    "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
  1589
! !
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1590
111
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1591
!GDBDebugger methodsFor:'utilities'!
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1592
295
4e7365cece13 Add utility method `GDBDebugger >> #cli:`
Jan Vrany <jan.vrany@labware.com>
parents: 294
diff changeset
  1593
cli
4e7365cece13 Add utility method `GDBDebugger >> #cli:`
Jan Vrany <jan.vrany@labware.com>
parents: 294
diff changeset
  1594
    "Open GDB CLI for interactive debugging. 
4e7365cece13 Add utility method `GDBDebugger >> #cli:`
Jan Vrany <jan.vrany@labware.com>
parents: 294
diff changeset
  1595
4e7365cece13 Add utility method `GDBDebugger >> #cli:`
Jan Vrany <jan.vrany@labware.com>
parents: 294
diff changeset
  1596
     Using `#cli` multiple times is permitted: in that case calling
4e7365cece13 Add utility method `GDBDebugger >> #cli:`
Jan Vrany <jan.vrany@labware.com>
parents: 294
diff changeset
  1597
     `#cli` would raise already opened CLI window if it has not been
4e7365cece13 Add utility method `GDBDebugger >> #cli:`
Jan Vrany <jan.vrany@labware.com>
parents: 294
diff changeset
  1598
     closed."
4e7365cece13 Add utility method `GDBDebugger >> #cli:`
Jan Vrany <jan.vrany@labware.com>
parents: 294
diff changeset
  1599
4e7365cece13 Add utility method `GDBDebugger >> #cli:`
Jan Vrany <jan.vrany@labware.com>
parents: 294
diff changeset
  1600
    GDBPortlib current newCLI: self.
4e7365cece13 Add utility method `GDBDebugger >> #cli:`
Jan Vrany <jan.vrany@labware.com>
parents: 294
diff changeset
  1601
4e7365cece13 Add utility method `GDBDebugger >> #cli:`
Jan Vrany <jan.vrany@labware.com>
parents: 294
diff changeset
  1602
    "Created: / 05-08-2023 / 07:08:22 / Jan Vrany <jan.vrany@labware.com>"
4e7365cece13 Add utility method `GDBDebugger >> #cli:`
Jan Vrany <jan.vrany@labware.com>
parents: 294
diff changeset
  1603
!
4e7365cece13 Add utility method `GDBDebugger >> #cli:`
Jan Vrany <jan.vrany@labware.com>
parents: 294
diff changeset
  1604
111
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1605
ensureFeature: feature
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1606
    "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
  1607
     throw an error"
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1608
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1609
    (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
  1610
        GDBUnsupportedFeatureError newException
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1611
            parameter: self -> feature;
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1612
            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
  1613
            raise.                               
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1614
    ].
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1615
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1616
    "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
  1617
!
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1618
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1619
waitUntilAlCommandsProcessed
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1620
    "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
  1621
     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
  1622
     using this.
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1623
    "
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1624
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1625
    self 
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1626
        assert:Processor activeProcess ~~ connection eventDispatchProcess
304
0dd4d6bc9b90 Compatibility: use `#assert:description:` instead of `#assert:message:`
Jan Vrany <jan.vrany@labware.com>
parents: 302
diff changeset
  1627
        description:'Cannot wait from within event dispatching process. Would deadlock'.           
170
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1628
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1629
    "/ 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
  1630
    "/ like an easy and safe approach. It's not meant for normal usage, anyway.
292
d4b3ddeda08d Compatibility: do not use `Delay waitForMilliseconds: x`
Jan Vrany <jan.vrany@labware.com>
parents: 286
diff changeset
  1631
    [ self hasPendingCommands ] whileTrue:[ (Delay forMilliseconds: 100) wait ].
170
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1632
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1633
    "Created: / 23-01-2019 / 21:03:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
304
0dd4d6bc9b90 Compatibility: use `#assert:description:` instead of `#assert:message:`
Jan Vrany <jan.vrany@labware.com>
parents: 302
diff changeset
  1634
    "Modified: / 21-08-2023 / 20:24:36 / Jan Vrany <jan.vrany@labware.com>"
170
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1635
!
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1636
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1637
waitUntilAllEventsProcessed
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1638
    "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
  1639
     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
  1640
     using this.
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1641
    "
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1642
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1643
    self 
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1644
        assert:Processor activeProcess ~~ connection eventDispatchProcess
304
0dd4d6bc9b90 Compatibility: use `#assert:description:` instead of `#assert:message:`
Jan Vrany <jan.vrany@labware.com>
parents: 302
diff changeset
  1645
        description:'Cannot wait from within event dispatching process. Would deadlock'.           
170
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1646
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1647
    "/ 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
  1648
    "/ like an easy and safe approach. It's not meant for normal usage, anyway.
292
d4b3ddeda08d Compatibility: do not use `Delay waitForMilliseconds: x`
Jan Vrany <jan.vrany@labware.com>
parents: 286
diff changeset
  1649
    [ self hasPendingEvents ] whileTrue:[ (Delay forMilliseconds: 100) wait ].
170
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1650
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 169
diff changeset
  1651
    "Created: / 23-01-2019 / 21:03:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
304
0dd4d6bc9b90 Compatibility: use `#assert:description:` instead of `#assert:message:`
Jan Vrany <jan.vrany@labware.com>
parents: 302
diff changeset
  1652
    "Modified: / 21-08-2023 / 20:24:28 / Jan Vrany <jan.vrany@labware.com>"
111
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1653
! !
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
  1654
21
83395ca8b257 Renamed GDB to GDBDebugger
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
  1655
!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
  1656
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
  1657
version_HG
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
  1658
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
  1659
    ^ '$Changeset: <not expanded> $'
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
  1660
! !
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
  1661
286
d22bc8f82f88 Compatibility: refactor finalization of debuggers and variable objects
Jan Vrany <jan.vrany@labware.com>
parents: 274
diff changeset
  1662
d22bc8f82f88 Compatibility: refactor finalization of debuggers and variable objects
Jan Vrany <jan.vrany@labware.com>
parents: 274
diff changeset
  1663
GDBDebugger initialize!