GDBThread.st
author Jan Vrany <jan.vrany@labware.com>
Thu, 07 Dec 2023 12:33:31 +0000
changeset 322 1b26d0a9560c
parent 315 91819b724b59
permissions -rw-r--r--
Emit and handle (custom) `-register-changed` notification This commit adds new (custom) asynchronous notification about register value being changed. Standard GDB does not notify MI clients about register value being changed when debugging (for example, by CLI command `set $rax = 1` or via Python's `Value.assign()`). This caused libgdb's register value cache being out of sync. In the past, this was partially worked around by manually emiting the notification on `GDBRegisterWithValue` APIs, but this did not (and could not) handle the case register was changed from GDB command line. To solve this problem, this commit installs a custom Python event handler that emits new GDB/MI notification - `-register-changed` - whenever a register changes after debugee is stopped. This has been enabled by upstream GDB commit 4825fd "gdb/python: implement support for sending custom MI async notifications" On libgdbs side, complete inferior state is invalidated. In theory, one could carefully invalidate only the changed `GDBRegisterWithValue` but in certain cases this could also change the backtrace (for example, if one updates stack pointer) or position in code. So it seems safer to just invalidate everything.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
91
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
     1
"
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
     2
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
     3
Copyright (C) 2015-now Jan Vrany
272
cdd1c9ad00de Change class categories to facilitate Pharo port
Jan Vrany <jan.vrany@labware.com>
parents: 259
diff changeset
     4
Copyright (C) 2020-2023 LabWare
91
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
     5
259
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 256
diff changeset
     6
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: 256
diff changeset
     7
of this software and associated documentation files (the 'Software'), to deal
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 256
diff changeset
     8
in the Software without restriction, including without limitation the rights
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 256
diff changeset
     9
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 256
diff changeset
    10
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: 256
diff changeset
    11
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
    12
259
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 256
diff changeset
    13
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: 256
diff changeset
    14
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
    15
259
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 256
diff changeset
    16
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: 256
diff changeset
    17
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 256
diff changeset
    18
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 256
diff changeset
    19
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 256
diff changeset
    20
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 256
diff changeset
    21
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: 256
diff changeset
    22
SOFTWARE.
91
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    23
"
35
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
"{ Package: 'jv:libgdbs' }"
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
53
63669c2c0f9e Test fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 51
diff changeset
    26
"{ NameSpace: Smalltalk }"
63669c2c0f9e Test fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 51
diff changeset
    27
36
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
    28
GDBDebuggerObject subclass:#GDBThread
86
7f53d51a0a65 Cache thread status and update it on `=stopped` and `=running` events
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    29
	instanceVariableNames:'id group status info stack'
35
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
	classVariableNames:''
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
	poolDictionaries:''
272
cdd1c9ad00de Change class categories to facilitate Pharo port
Jan Vrany <jan.vrany@labware.com>
parents: 259
diff changeset
    32
	category:'GDB'
35
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
!
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
91
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    35
!GDBThread class methodsFor:'documentation'!
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    36
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    37
copyright
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    38
"
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    39
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
    40
Copyright (C) 2015-now Jan Vrany
272
cdd1c9ad00de Change class categories to facilitate Pharo port
Jan Vrany <jan.vrany@labware.com>
parents: 259
diff changeset
    41
Copyright (C) 2020-2023 LabWare
91
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    42
259
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 256
diff changeset
    43
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: 256
diff changeset
    44
of this software and associated documentation files (the 'Software'), to deal
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 256
diff changeset
    45
in the Software without restriction, including without limitation the rights
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 256
diff changeset
    46
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 256
diff changeset
    47
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: 256
diff changeset
    48
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
    49
259
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 256
diff changeset
    50
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: 256
diff changeset
    51
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
    52
259
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 256
diff changeset
    53
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: 256
diff changeset
    54
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 256
diff changeset
    55
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 256
diff changeset
    56
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 256
diff changeset
    57
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 256
diff changeset
    58
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: 256
diff changeset
    59
SOFTWARE.
91
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    60
"
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    61
! !
70
6d7285bb1703 GDBThread: use native name in thread's displayString
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
    62
36
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
    63
!GDBThread class methodsFor:'instance creation'!
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
    64
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
    65
newWithDebugger: debugger id: id group: group
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
    66
    ^ self new
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
    67
        setDebugger: debugger;
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
    68
        setId: id;
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
    69
        setGroup: group;
95
f417138e9c48 Win32: initial support for Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 91
diff changeset
    70
        setStatus: GDBThreadStateRunning theOneAndOnlyInstance;
36
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
    71
        yourself.
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
    72
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
    73
    "Created: / 07-09-2014 / 21:33:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
95
f417138e9c48 Win32: initial support for Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 91
diff changeset
    74
    "Modified: / 14-01-2018 / 22:33:26 / jv"
36
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
    75
! !
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
    76
35
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    77
!GDBThread class methodsFor:'accessing - GDB value descriptors'!
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    78
45
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 43
diff changeset
    79
description
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 43
diff changeset
    80
    ^ (super description)
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 43
diff changeset
    81
        define:#id as:Integer;
35
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    82
        yourself
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    84
    "Created: / 06-09-2014 / 02:21:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    85
! !
c17ecf90e446 Initial support for thread groups, threads and breakpoints.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    86
36
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
    87
!GDBThread methodsFor:'accessing'!
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
    88
43
22236b6d1d9a Remove threads from thread group when threadgroup terminates.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 41
diff changeset
    89
group
22236b6d1d9a Remove threads from thread group when threadgroup terminates.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 41
diff changeset
    90
    ^ group
22236b6d1d9a Remove threads from thread group when threadgroup terminates.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 41
diff changeset
    91
!
22236b6d1d9a Remove threads from thread group when threadgroup terminates.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 41
diff changeset
    92
36
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
    93
id
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
    94
    ^ id
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
    95
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
    96
    "Created: / 07-09-2014 / 22:41:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
39
2b9d2f75906f Some work on execution stack model
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
    97
!
2b9d2f75906f Some work on execution stack model
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
    98
70
6d7285bb1703 GDBThread: use native name in thread's displayString
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
    99
name
214
0c56387e5d12 Add `GDBThread >> #name`
Jan Vrany <jan.vrany@labware.com>
parents: 136
diff changeset
   100
    | i |
0c56387e5d12 Add `GDBThread >> #name`
Jan Vrany <jan.vrany@labware.com>
parents: 136
diff changeset
   101
0c56387e5d12 Add `GDBThread >> #name`
Jan Vrany <jan.vrany@labware.com>
parents: 136
diff changeset
   102
    i := self info.
0c56387e5d12 Add `GDBThread >> #name`
Jan Vrany <jan.vrany@labware.com>
parents: 136
diff changeset
   103
    ^ i name ? i targetId.
70
6d7285bb1703 GDBThread: use native name in thread's displayString
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   104
6d7285bb1703 GDBThread: use native name in thread's displayString
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   105
    "Created: / 10-03-2015 / 00:32:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
214
0c56387e5d12 Add `GDBThread >> #name`
Jan Vrany <jan.vrany@labware.com>
parents: 136
diff changeset
   106
    "Modified: / 22-02-2021 / 13:21:13 / Jan Vrany <jan.vrany@labware.com>"
70
6d7285bb1703 GDBThread: use native name in thread's displayString
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   107
!
6d7285bb1703 GDBThread: use native name in thread's displayString
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   108
39
2b9d2f75906f Some work on execution stack model
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
   109
stack
2b9d2f75906f Some work on execution stack model
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
   110
    self ensureIsStopped.
41
fb48207b6104 Fixes in thread's stack mangement. Dispatch events to applications using their UI event loop.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   111
    ^ stack value
39
2b9d2f75906f Some work on execution stack model
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
   112
2b9d2f75906f Some work on execution stack model
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
   113
    "Created: / 09-09-2014 / 00:02:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
136
213e436320fe Fix `GDBThread >> stack` to return old stack when thread is running
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 130
diff changeset
   114
    "Modified: / 01-09-2018 / 00:11:19 / 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: 220
diff changeset
   115
    "Modified: / 10-03-2021 / 14:56:43 / Jan Vrany <jan.vrany@labware.com>"
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   116
!
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   117
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   118
stackButNotStale
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   119
    self ensureIsStopped.
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   120
    ^ stack valueButNotStale
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   121
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   122
    "Created: / 10-03-2021 / 15:00:53 / Jan Vrany <jan.vrany@labware.com>"
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   123
!
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   124
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   125
stackPossiblyStale
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   126
    self ensureIsStopped.
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   127
    ^ stack valuePossiblyStale
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   128
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   129
    "Created: / 10-03-2021 / 14:55:21 / Jan Vrany <jan.vrany@labware.com>"
39
2b9d2f75906f Some work on execution stack model
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
   130
!
2b9d2f75906f Some work on execution stack model
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
   131
2b9d2f75906f Some work on execution stack model
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
   132
status
86
7f53d51a0a65 Cache thread status and update it on `=stopped` and `=running` events
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   133
    status isUnknown ifTrue:[ 
7f53d51a0a65 Cache thread status and update it on `=stopped` and `=running` events
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   134
        status := self info state
7f53d51a0a65 Cache thread status and update it on `=stopped` and `=running` events
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   135
    ].
7f53d51a0a65 Cache thread status and update it on `=stopped` and `=running` events
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   136
    ^ status
67
c4ac76afe03d Keep thread information in transient thread-info object.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 55
diff changeset
   137
86
7f53d51a0a65 Cache thread status and update it on `=stopped` and `=running` events
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   138
    "Modified: / 12-07-2017 / 13:36:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
70
6d7285bb1703 GDBThread: use native name in thread's displayString
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   139
!
6d7285bb1703 GDBThread: use native name in thread's displayString
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   140
6d7285bb1703 GDBThread: use native name in thread's displayString
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   141
targetId
6d7285bb1703 GDBThread: use native name in thread's displayString
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   142
    ^ self info targetId
6d7285bb1703 GDBThread: use native name in thread's displayString
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   143
6d7285bb1703 GDBThread: use native name in thread's displayString
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   144
    "Created: / 10-03-2015 / 00:32:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
67
c4ac76afe03d Keep thread information in transient thread-info object.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 55
diff changeset
   145
! !
c4ac76afe03d Keep thread information in transient thread-info object.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 55
diff changeset
   146
c4ac76afe03d Keep thread information in transient thread-info object.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 55
diff changeset
   147
!GDBThread methodsFor:'accessing-private'!
c4ac76afe03d Keep thread information in transient thread-info object.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 55
diff changeset
   148
c4ac76afe03d Keep thread information in transient thread-info object.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 55
diff changeset
   149
info
c4ac76afe03d Keep thread information in transient thread-info object.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 55
diff changeset
   150
    info isNil ifTrue:[
c4ac76afe03d Keep thread information in transient thread-info object.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 55
diff changeset
   151
        info := GDBTransientDataHolder debugger: debugger factory:[ 
c4ac76afe03d Keep thread information in transient thread-info object.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 55
diff changeset
   152
            | result infos |
c4ac76afe03d Keep thread information in transient thread-info object.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 55
diff changeset
   153
90
6046abc9ddf4 Replaced Squek computed arrays by more verbose `Array with:...`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   154
            result := debugger send: (GDBMI_thread_info new arguments: (Array with: id)).
67
c4ac76afe03d Keep thread information in transient thread-info object.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 55
diff changeset
   155
            infos := result propertyAt: #threads.
c4ac76afe03d Keep thread information in transient thread-info object.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 55
diff changeset
   156
            self assert: (infos isEmptyOrNil or:[ infos size == 1 and:[ infos first id = id ] ]).
72
eb4eea3ebf4c Increate sequence number also when thread or thread group is stopped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   157
            infos isEmptyOrNil 
eb4eea3ebf4c Increate sequence number also when thread or thread group is stopped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   158
                ifTrue:[ GDBThreadInfo new setId: id state: GDBThreadStateTerminated theOneAndOnlyInstance ] 
eb4eea3ebf4c Increate sequence number also when thread or thread group is stopped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   159
                ifFalse:[ infos first ]
67
c4ac76afe03d Keep thread information in transient thread-info object.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 55
diff changeset
   160
        ].
c4ac76afe03d Keep thread information in transient thread-info object.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 55
diff changeset
   161
    ].
c4ac76afe03d Keep thread information in transient thread-info object.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 55
diff changeset
   162
    ^ info value
c4ac76afe03d Keep thread information in transient thread-info object.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 55
diff changeset
   163
c4ac76afe03d Keep thread information in transient thread-info object.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 55
diff changeset
   164
    "Created: / 08-03-2015 / 09:07:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
90
6046abc9ddf4 Replaced Squek computed arrays by more verbose `Array with:...`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
   165
    "Modified: / 17-11-2017 / 20:21:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
36
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   166
! !
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   167
70
6d7285bb1703 GDBThread: use native name in thread's displayString
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   168
!GDBThread methodsFor:'displaying'!
6d7285bb1703 GDBThread: use native name in thread's displayString
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   169
311
aaa582ae8897 Add a bunch of `#displayOn:` methods
Jan Vrany <jan.vrany@labware.com>
parents: 289
diff changeset
   170
displayOn: aStream
aaa582ae8897 Add a bunch of `#displayOn:` methods
Jan Vrany <jan.vrany@labware.com>
parents: 289
diff changeset
   171
    aStream nextPutAll: 'Thread '.
aaa582ae8897 Add a bunch of `#displayOn:` methods
Jan Vrany <jan.vrany@labware.com>
parents: 289
diff changeset
   172
    id printOn: aStream base: 10 size: 2 fill: $0.
aaa582ae8897 Add a bunch of `#displayOn:` methods
Jan Vrany <jan.vrany@labware.com>
parents: 289
diff changeset
   173
    aStream nextPutAll: ' ['.
aaa582ae8897 Add a bunch of `#displayOn:` methods
Jan Vrany <jan.vrany@labware.com>
parents: 289
diff changeset
   174
    self status printOn: aStream.
aaa582ae8897 Add a bunch of `#displayOn:` methods
Jan Vrany <jan.vrany@labware.com>
parents: 289
diff changeset
   175
    aStream nextPutAll: ']'.   
aaa582ae8897 Add a bunch of `#displayOn:` methods
Jan Vrany <jan.vrany@labware.com>
parents: 289
diff changeset
   176
    self isRunning ifTrue: [ 
aaa582ae8897 Add a bunch of `#displayOn:` methods
Jan Vrany <jan.vrany@labware.com>
parents: 289
diff changeset
   177
        aStream nextPutAll: ' "'; nextPutAll: self name; nextPut: $"
aaa582ae8897 Add a bunch of `#displayOn:` methods
Jan Vrany <jan.vrany@labware.com>
parents: 289
diff changeset
   178
    ].
70
6d7285bb1703 GDBThread: use native name in thread's displayString
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   179
311
aaa582ae8897 Add a bunch of `#displayOn:` methods
Jan Vrany <jan.vrany@labware.com>
parents: 289
diff changeset
   180
    "Created: / 29-08-2023 / 11:43:02 / Jan Vrany <jan.vrany@labware.com>"
aaa582ae8897 Add a bunch of `#displayOn:` methods
Jan Vrany <jan.vrany@labware.com>
parents: 289
diff changeset
   181
    "Modified: / 29-08-2023 / 13:45:23 / Jan Vrany <jan.vrany@labware.com>"
70
6d7285bb1703 GDBThread: use native name in thread's displayString
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   182
! !
6d7285bb1703 GDBThread: use native name in thread's displayString
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   183
86
7f53d51a0a65 Cache thread status and update it on `=stopped` and `=running` events
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   184
!GDBThread methodsFor:'event handling'!
7f53d51a0a65 Cache thread status and update it on `=stopped` and `=running` events
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   185
7f53d51a0a65 Cache thread status and update it on `=stopped` and `=running` events
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   186
onRunningEvent: aGDBRunningEvent
289
5bcbc6e8ee12 Compatibility: use `#includes:` rather than `#includesIdentical:`
Jan Vrany <jan.vrany@labware.com>
parents: 272
diff changeset
   187
    self assert: (aGDBRunningEvent threads includes: self).
86
7f53d51a0a65 Cache thread status and update it on `=stopped` and `=running` events
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   188
    status := GDBThreadStateRunning theOneAndOnlyInstance.
7f53d51a0a65 Cache thread status and update it on `=stopped` and `=running` events
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   189
7f53d51a0a65 Cache thread status and update it on `=stopped` and `=running` events
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   190
    "Created: / 12-07-2017 / 13:50:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
289
5bcbc6e8ee12 Compatibility: use `#includes:` rather than `#includesIdentical:`
Jan Vrany <jan.vrany@labware.com>
parents: 272
diff changeset
   191
    "Modified: / 14-07-2023 / 17:18:19 / Jan Vrany <jan.vrany@labware.com>"
86
7f53d51a0a65 Cache thread status and update it on `=stopped` and `=running` events
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   192
!
7f53d51a0a65 Cache thread status and update it on `=stopped` and `=running` events
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   193
7f53d51a0a65 Cache thread status and update it on `=stopped` and `=running` events
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   194
onStoppedEvent: aGDBStoppedEvent
289
5bcbc6e8ee12 Compatibility: use `#includes:` rather than `#includesIdentical:`
Jan Vrany <jan.vrany@labware.com>
parents: 272
diff changeset
   195
    self assert: (aGDBStoppedEvent threads includes: self).
86
7f53d51a0a65 Cache thread status and update it on `=stopped` and `=running` events
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   196
    status := GDBThreadStateStopped theOneAndOnlyInstance.
232
eb382c43abd9 Fix old and horrible bug in `GDBThread >> onStoppedEvent:`
Jan Vrany <jan.vrany@labware.com>
parents: 223
diff changeset
   197
    aGDBStoppedEvent stoppedThread == self ifTrue: [
253
df95df6c8546 Care for `GDBStoppedEvent >> #frame` returning `nil`
Jan Vrany <jan.vrany@labware.com>
parents: 232
diff changeset
   198
        "/ Carefull - not all stop events have frame, for example
df95df6c8546 Care for `GDBStoppedEvent >> #frame` returning `nil`
Jan Vrany <jan.vrany@labware.com>
parents: 232
diff changeset
   199
        "/ solib-events have not!!
df95df6c8546 Care for `GDBStoppedEvent >> #frame` returning `nil`
Jan Vrany <jan.vrany@labware.com>
parents: 232
diff changeset
   200
        aGDBStoppedEvent frame notNil ifTrue:[
df95df6c8546 Care for `GDBStoppedEvent >> #frame` returning `nil`
Jan Vrany <jan.vrany@labware.com>
parents: 232
diff changeset
   201
            aGDBStoppedEvent frame   
df95df6c8546 Care for `GDBStoppedEvent >> #frame` returning `nil`
Jan Vrany <jan.vrany@labware.com>
parents: 232
diff changeset
   202
                setDebugger: debugger;
df95df6c8546 Care for `GDBStoppedEvent >> #frame` returning `nil`
Jan Vrany <jan.vrany@labware.com>
parents: 232
diff changeset
   203
                setThread: self;
df95df6c8546 Care for `GDBStoppedEvent >> #frame` returning `nil`
Jan Vrany <jan.vrany@labware.com>
parents: 232
diff changeset
   204
                setLevel: 0.
df95df6c8546 Care for `GDBStoppedEvent >> #frame` returning `nil`
Jan Vrany <jan.vrany@labware.com>
parents: 232
diff changeset
   205
        ].
232
eb382c43abd9 Fix old and horrible bug in `GDBThread >> onStoppedEvent:`
Jan Vrany <jan.vrany@labware.com>
parents: 223
diff changeset
   206
    ].
86
7f53d51a0a65 Cache thread status and update it on `=stopped` and `=running` events
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   207
7f53d51a0a65 Cache thread status and update it on `=stopped` and `=running` events
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   208
    "Created: / 12-07-2017 / 13:50:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
289
5bcbc6e8ee12 Compatibility: use `#includes:` rather than `#includesIdentical:`
Jan Vrany <jan.vrany@labware.com>
parents: 272
diff changeset
   209
    "Modified: / 14-07-2023 / 17:18:15 / Jan Vrany <jan.vrany@labware.com>"
220
372b64967435 Minor cleanup of handling of `=thread-selected` event
Jan Vrany <jan.vrany@labware.com>
parents: 214
diff changeset
   210
!
372b64967435 Minor cleanup of handling of `=thread-selected` event
Jan Vrany <jan.vrany@labware.com>
parents: 214
diff changeset
   211
372b64967435 Minor cleanup of handling of `=thread-selected` event
Jan Vrany <jan.vrany@labware.com>
parents: 214
diff changeset
   212
onThreadSelectedEvent: aGDBThreadSelectedEvent
372b64967435 Minor cleanup of handling of `=thread-selected` event
Jan Vrany <jan.vrany@labware.com>
parents: 214
diff changeset
   213
    |  frame |
372b64967435 Minor cleanup of handling of `=thread-selected` event
Jan Vrany <jan.vrany@labware.com>
parents: 214
diff changeset
   214
372b64967435 Minor cleanup of handling of `=thread-selected` event
Jan Vrany <jan.vrany@labware.com>
parents: 214
diff changeset
   215
    frame := aGDBThreadSelectedEvent frame.
372b64967435 Minor cleanup of handling of `=thread-selected` event
Jan Vrany <jan.vrany@labware.com>
parents: 214
diff changeset
   216
372b64967435 Minor cleanup of handling of `=thread-selected` event
Jan Vrany <jan.vrany@labware.com>
parents: 214
diff changeset
   217
    aGDBThreadSelectedEvent setThread: self.
372b64967435 Minor cleanup of handling of `=thread-selected` event
Jan Vrany <jan.vrany@labware.com>
parents: 214
diff changeset
   218
    "/ Be carefull, thread may be running!!
256
9e2ac3a4f23c Improved `GDBEvent >> #printOn:`
Jan Vrany <jan.vrany@labware.com>
parents: 253
diff changeset
   219
    (self isStopped and:[frame notNil]) ifTrue:[ 
9e2ac3a4f23c Improved `GDBEvent >> #printOn:`
Jan Vrany <jan.vrany@labware.com>
parents: 253
diff changeset
   220
        "/ Beware, `self stack` may execute another command
9e2ac3a4f23c Improved `GDBEvent >> #printOn:`
Jan Vrany <jan.vrany@labware.com>
parents: 253
diff changeset
   221
        "/ and this is called from within event dispatch loop.
9e2ac3a4f23c Improved `GDBEvent >> #printOn:`
Jan Vrany <jan.vrany@labware.com>
parents: 253
diff changeset
   222
        "/ 
9e2ac3a4f23c Improved `GDBEvent >> #printOn:`
Jan Vrany <jan.vrany@labware.com>
parents: 253
diff changeset
   223
        "/ This was not possible before, but now it should
9e2ac3a4f23c Improved `GDBEvent >> #printOn:`
Jan Vrany <jan.vrany@labware.com>
parents: 253
diff changeset
   224
        "/ (see commit bf5cfa214dd4)
220
372b64967435 Minor cleanup of handling of `=thread-selected` event
Jan Vrany <jan.vrany@labware.com>
parents: 214
diff changeset
   225
        aGDBThreadSelectedEvent setFrame: (self stack at: (frame level + 1))
372b64967435 Minor cleanup of handling of `=thread-selected` event
Jan Vrany <jan.vrany@labware.com>
parents: 214
diff changeset
   226
    ] ifFalse:[ 
372b64967435 Minor cleanup of handling of `=thread-selected` event
Jan Vrany <jan.vrany@labware.com>
parents: 214
diff changeset
   227
        "/ If it is running, at least fixup event's frame, if there's any (it may not
372b64967435 Minor cleanup of handling of `=thread-selected` event
Jan Vrany <jan.vrany@labware.com>
parents: 214
diff changeset
   228
        "/ if the thread is running at the time of =thread-select event.
372b64967435 Minor cleanup of handling of `=thread-selected` event
Jan Vrany <jan.vrany@labware.com>
parents: 214
diff changeset
   229
        "/ Uff, so many cases...
372b64967435 Minor cleanup of handling of `=thread-selected` event
Jan Vrany <jan.vrany@labware.com>
parents: 214
diff changeset
   230
        frame notNil ifTrue:[
372b64967435 Minor cleanup of handling of `=thread-selected` event
Jan Vrany <jan.vrany@labware.com>
parents: 214
diff changeset
   231
            frame 
372b64967435 Minor cleanup of handling of `=thread-selected` event
Jan Vrany <jan.vrany@labware.com>
parents: 214
diff changeset
   232
                setDebugger: debugger;
372b64967435 Minor cleanup of handling of `=thread-selected` event
Jan Vrany <jan.vrany@labware.com>
parents: 214
diff changeset
   233
                setThread: self.
372b64967435 Minor cleanup of handling of `=thread-selected` event
Jan Vrany <jan.vrany@labware.com>
parents: 214
diff changeset
   234
        ].
372b64967435 Minor cleanup of handling of `=thread-selected` event
Jan Vrany <jan.vrany@labware.com>
parents: 214
diff changeset
   235
    ].
372b64967435 Minor cleanup of handling of `=thread-selected` event
Jan Vrany <jan.vrany@labware.com>
parents: 214
diff changeset
   236
372b64967435 Minor cleanup of handling of `=thread-selected` event
Jan Vrany <jan.vrany@labware.com>
parents: 214
diff changeset
   237
    "Created: / 29-07-2018 / 22:21:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
372b64967435 Minor cleanup of handling of `=thread-selected` event
Jan Vrany <jan.vrany@labware.com>
parents: 214
diff changeset
   238
    "Modified: / 20-11-2019 / 22:09:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
256
9e2ac3a4f23c Improved `GDBEvent >> #printOn:`
Jan Vrany <jan.vrany@labware.com>
parents: 253
diff changeset
   239
    "Modified: / 25-01-2022 / 15:23:24 / Jan Vrany <jan.vrany@labware.com>"
86
7f53d51a0a65 Cache thread status and update it on `=stopped` and `=running` events
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   240
! !
7f53d51a0a65 Cache thread status and update it on `=stopped` and `=running` events
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   241
36
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   242
!GDBThread methodsFor:'initialization'!
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   243
223
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   244
setDebugger: aGDBDebugger
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   245
    debugger := aGDBDebugger.
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   246
    stack := GDBTransientDataHolder debugger: debugger factory:[ :old | 
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   247
        [
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   248
            | result depth new oldFrameIndex oldFrame newFrameIndex newFrame |
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   249
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   250
            result := debugger send: (GDBMI_stack_info_depth new arguments: (Array with: '--thread' with: id with: 100)).
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   251
            depth := result propertyAt: #depth.
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   252
            result := debugger send: (GDBMI_stack_list_frames new arguments: (Array with:  '--thread' with: id with: 0 with: depth - 1 )).
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   253
            new := result propertyAt: #stack.
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   254
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   255
            "/ Now, walk from the bottom of the stack (the least recent frame) and
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   256
            "/ ipdate `new` array with frames from `old` array to preserve the
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   257
            "/ identity.
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   258
            newFrameIndex := new size.
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   259
            oldFrameIndex := old size.
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   260
            [ newFrameIndex > 0 and:[ oldFrameIndex > 0 ] ] whileTrue:[ 
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   261
                newFrame := new at: newFrameIndex.
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   262
                oldFrame := old at: oldFrameIndex.
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   263
                "/ If frame addrs matches, both frames really represent the same thing so
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   264
                "/ just replace the 'new' frame with the 'old'.
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   265
                newFrame addr = oldFrame addr ifTrue:[ 
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   266
                    "/ OK, the two frames are really the same thing
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   267
                    oldFrame setLevel: newFrame level. "/ Update level
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   268
                    new at: newFrameIndex put: (old at: oldFrameIndex).
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   269
                    newFrameIndex := newFrameIndex - 1.
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   270
                    oldFrameIndex := oldFrameIndex - 1.
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   271
                ] ifFalse:[ 
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   272
                    "/ No, frame pc differs. This is the first time they differ so
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   273
                    "/ it could be the same frame just on different PC (since PC of
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   274
                    "/ caller did not change). Subsequent frames could also be "same"
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   275
                    "/ if they're inlined into caller - in this case, the PC (#addr) of
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   276
                    "/ the caller frame and inlined callee are the same.
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   277
                    "/ 
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   278
                    "/ So, we update subsequent frames as long as 
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   279
                    "/  a) function names are the same AND
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   280
                    "/  b) PC is the same as PC of its caller
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   281
                    "/
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   282
                    "/ Complicated, isn't it?
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   283
                    | oldAddr newAddr |
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   284
                    oldAddr := oldFrame addr.
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   285
                    newAddr := newFrame addr.
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   286
                    [ newFrameIndex > 0 and:[ oldFrameIndex > 0 ] ] whileTrue:[
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   287
                        newFrame := new at: newFrameIndex.
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   288
                        oldFrame := old at: oldFrameIndex.    
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   289
                        ("a)"oldFrame func = newFrame func and: ["b)"oldFrame addr = oldAddr and:[newFrame addr = newAddr]]) ifTrue:[ 
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   290
                            "/ Update the frame...
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   291
                            oldFrame setAddr: newFrame addr.
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   292
                            oldFrame setLine: newFrame line.
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   293
                            oldFrame setLevel: newFrame level.
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   294
                            new at: newFrameIndex put: (old at: oldFrameIndex).
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   295
                            newFrameIndex := newFrameIndex - 1.
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   296
                            oldFrameIndex := oldFrameIndex - 1.    
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   297
                        ] ifFalse:[
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   298
                            "/ Terminate the loop, see the condition above.
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   299
                            oldFrameIndex := 0. 
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   300
                        ].
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   301
                    ]
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   302
                ].
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   303
            ].
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   304
            "/ For the remaining really new frames, set the debugger
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   305
            "/ and the thread.
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   306
            [ newFrameIndex > 0 ] whileTrue:[ 
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   307
                newFrame := new at: newFrameIndex.
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   308
                newFrame setDebugger: debugger.
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   309
                newFrame setThread: self.
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   310
                newFrameIndex := newFrameIndex - 1.
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   311
            ].
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   312
            new
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   313
        ] on: GDBError do:[ :ex |
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   314
            self isRunning ifFalse:[
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   315
                ex pass.
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   316
            ].
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   317
            old.
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   318
        ].
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   319
    ].
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   320
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   321
    "Created: / 10-03-2021 / 15:02:28 / Jan Vrany <jan.vrany@labware.com>"
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   322
!
5ba4abfcb7e7 Track user context (selected thread and frame) in `GDBDebugger`
Jan Vrany <jan.vrany@labware.com>
parents: 220
diff changeset
   323
36
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   324
setGroup: aGDBThreadGroup
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   325
    self assert: group isNil.
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   326
    group := aGDBThreadGroup.
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   327
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   328
    "Created: / 07-09-2014 / 21:32:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   329
!
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   330
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   331
setId: tid
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   332
    self assert: id isNil.
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   333
    id := tid.
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   334
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   335
    "Created: / 07-09-2014 / 21:31:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
67
c4ac76afe03d Keep thread information in transient thread-info object.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 55
diff changeset
   336
    "Modified: / 08-03-2015 / 09:08:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
36
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   337
!
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   338
86
7f53d51a0a65 Cache thread status and update it on `=stopped` and `=running` events
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   339
setStatus: aGDBThreadState
7f53d51a0a65 Cache thread status and update it on `=stopped` and `=running` events
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   340
    status := aGDBThreadState
7f53d51a0a65 Cache thread status and update it on `=stopped` and `=running` events
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   341
7f53d51a0a65 Cache thread status and update it on `=stopped` and `=running` events
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   342
    "Created: / 12-07-2017 / 13:43:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
7f53d51a0a65 Cache thread status and update it on `=stopped` and `=running` events
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   343
!
7f53d51a0a65 Cache thread status and update it on `=stopped` and `=running` events
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   344
36
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   345
setTerminated
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   346
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   347
    "Created: / 07-09-2014 / 21:37:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
67
c4ac76afe03d Keep thread information in transient thread-info object.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 55
diff changeset
   348
    "Modified: / 08-03-2015 / 09:08:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
36
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   349
! !
095c4b0b74d3 Added support for threads.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   350
315
91819b724b59 Add inspector tabs showing breakpoints, inferiors, ...
Jan Vrany <jan.vrany@labware.com>
parents: 311
diff changeset
   351
!GDBThread methodsFor:'inspecting'!
91819b724b59 Add inspector tabs showing breakpoints, inferiors, ...
Jan Vrany <jan.vrany@labware.com>
parents: 311
diff changeset
   352
91819b724b59 Add inspector tabs showing breakpoints, inferiors, ...
Jan Vrany <jan.vrany@labware.com>
parents: 311
diff changeset
   353
inspector2TabBacktrace
91819b724b59 Add inspector tabs showing breakpoints, inferiors, ...
Jan Vrany <jan.vrany@labware.com>
parents: 311
diff changeset
   354
    <inspector2Tab>
91819b724b59 Add inspector tabs showing breakpoints, inferiors, ...
Jan Vrany <jan.vrany@labware.com>
parents: 311
diff changeset
   355
    ^ (self newInspector2Tab)
91819b724b59 Add inspector tabs showing breakpoints, inferiors, ...
Jan Vrany <jan.vrany@labware.com>
parents: 311
diff changeset
   356
        label:'Backtrace';
91819b724b59 Add inspector tabs showing breakpoints, inferiors, ...
Jan Vrany <jan.vrany@labware.com>
parents: 311
diff changeset
   357
        priority:60;
91819b724b59 Add inspector tabs showing breakpoints, inferiors, ...
Jan Vrany <jan.vrany@labware.com>
parents: 311
diff changeset
   358
        list:[ self stack ];
91819b724b59 Add inspector tabs showing breakpoints, inferiors, ...
Jan Vrany <jan.vrany@labware.com>
parents: 311
diff changeset
   359
        font: CodeView defaultFont;
91819b724b59 Add inspector tabs showing breakpoints, inferiors, ...
Jan Vrany <jan.vrany@labware.com>
parents: 311
diff changeset
   360
        yourself
91819b724b59 Add inspector tabs showing breakpoints, inferiors, ...
Jan Vrany <jan.vrany@labware.com>
parents: 311
diff changeset
   361
91819b724b59 Add inspector tabs showing breakpoints, inferiors, ...
Jan Vrany <jan.vrany@labware.com>
parents: 311
diff changeset
   362
    "Created: / 01-09-2023 / 22:29:26 / Jan Vrany <jan.vrany@labware.com>"
91819b724b59 Add inspector tabs showing breakpoints, inferiors, ...
Jan Vrany <jan.vrany@labware.com>
parents: 311
diff changeset
   363
    "Modified: / 02-09-2023 / 15:34:54 / Jan Vrany <jan.vrany@labware.com>"
91819b724b59 Add inspector tabs showing breakpoints, inferiors, ...
Jan Vrany <jan.vrany@labware.com>
parents: 311
diff changeset
   364
! !
91819b724b59 Add inspector tabs showing breakpoints, inferiors, ...
Jan Vrany <jan.vrany@labware.com>
parents: 311
diff changeset
   365
43
22236b6d1d9a Remove threads from thread group when threadgroup terminates.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 41
diff changeset
   366
!GDBThread methodsFor:'printing & storing'!
22236b6d1d9a Remove threads from thread group when threadgroup terminates.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 41
diff changeset
   367
22236b6d1d9a Remove threads from thread group when threadgroup terminates.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 41
diff changeset
   368
printOn:aStream
22236b6d1d9a Remove threads from thread group when threadgroup terminates.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 41
diff changeset
   369
    "append a printed representation if the receiver to the argument, aStream"
22236b6d1d9a Remove threads from thread group when threadgroup terminates.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 41
diff changeset
   370
22236b6d1d9a Remove threads from thread group when threadgroup terminates.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 41
diff changeset
   371
    aStream nextPutAll:'thread  '.
22236b6d1d9a Remove threads from thread group when threadgroup terminates.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 41
diff changeset
   372
    id printOn:aStream.
22236b6d1d9a Remove threads from thread group when threadgroup terminates.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 41
diff changeset
   373
"/    aStream nextPutAll:'in group '.
22236b6d1d9a Remove threads from thread group when threadgroup terminates.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 41
diff changeset
   374
"/    group id printOn:aStream.
22236b6d1d9a Remove threads from thread group when threadgroup terminates.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 41
diff changeset
   375
    aStream nextPutAll:' ['.
67
c4ac76afe03d Keep thread information in transient thread-info object.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 55
diff changeset
   376
    self status printOn:aStream.
43
22236b6d1d9a Remove threads from thread group when threadgroup terminates.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 41
diff changeset
   377
    aStream nextPutAll:']'.
22236b6d1d9a Remove threads from thread group when threadgroup terminates.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 41
diff changeset
   378
67
c4ac76afe03d Keep thread information in transient thread-info object.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 55
diff changeset
   379
    "Modified: / 08-03-2015 / 09:07:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
43
22236b6d1d9a Remove threads from thread group when threadgroup terminates.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 41
diff changeset
   380
! !
22236b6d1d9a Remove threads from thread group when threadgroup terminates.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 41
diff changeset
   381
39
2b9d2f75906f Some work on execution stack model
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
   382
!GDBThread methodsFor:'private'!
2b9d2f75906f Some work on execution stack model
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
   383
2b9d2f75906f Some work on execution stack model
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
   384
ensureIsStopped
40
0ce76b671515 Some more support for stack frames.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   385
    self isStopped ifFalse:[
111
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   386
        (GDBInvalidObjectError newException)
39
2b9d2f75906f Some work on execution stack model
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
   387
            parameter:self;
2b9d2f75906f Some work on execution stack model
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
   388
            messageText:'Invalid state (thread is running or already dead)';
2b9d2f75906f Some work on execution stack model
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
   389
            raise.
2b9d2f75906f Some work on execution stack model
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
   390
    ].
2b9d2f75906f Some work on execution stack model
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
   391
2b9d2f75906f Some work on execution stack model
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
   392
    "Created: / 09-09-2014 / 00:04:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
40
0ce76b671515 Some more support for stack frames.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   393
    "Modified: / 16-09-2014 / 23:51:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
39
2b9d2f75906f Some work on execution stack model
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
   394
! !
2b9d2f75906f Some work on execution stack model
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
   395
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   396
!GDBThread methodsFor:'testing'!
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   397
43
22236b6d1d9a Remove threads from thread group when threadgroup terminates.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 41
diff changeset
   398
isDead
95
f417138e9c48 Win32: initial support for Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 91
diff changeset
   399
    ^ self isTerminated
43
22236b6d1d9a Remove threads from thread group when threadgroup terminates.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 41
diff changeset
   400
22236b6d1d9a Remove threads from thread group when threadgroup terminates.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 41
diff changeset
   401
    "Created: / 22-09-2014 / 00:54:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
67
c4ac76afe03d Keep thread information in transient thread-info object.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 55
diff changeset
   402
    "Modified: / 08-03-2015 / 12:35:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
95
f417138e9c48 Win32: initial support for Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 91
diff changeset
   403
    "Modified: / 14-01-2018 / 22:34:04 / jv"
43
22236b6d1d9a Remove threads from thread group when threadgroup terminates.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 41
diff changeset
   404
!
22236b6d1d9a Remove threads from thread group when threadgroup terminates.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 41
diff changeset
   405
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   406
isRunning
67
c4ac76afe03d Keep thread information in transient thread-info object.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 55
diff changeset
   407
    ^ self status isRunning
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   408
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   409
    "Created: / 07-09-2014 / 23:23:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
67
c4ac76afe03d Keep thread information in transient thread-info object.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 55
diff changeset
   410
    "Modified: / 08-03-2015 / 09:08:49 / 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
   411
!
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   412
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   413
isStopped
67
c4ac76afe03d Keep thread information in transient thread-info object.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 55
diff changeset
   414
    ^ self status isStopped
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   415
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   416
    "Created: / 07-09-2014 / 23:23:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
67
c4ac76afe03d Keep thread information in transient thread-info object.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 55
diff changeset
   417
    "Modified: / 08-03-2015 / 09:08:52 / 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
   418
!
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   419
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   420
isTerminated
67
c4ac76afe03d Keep thread information in transient thread-info object.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 55
diff changeset
   421
    ^ self status isTerminated
37
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   422
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   423
    "Created: / 07-09-2014 / 23:23:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
67
c4ac76afe03d Keep thread information in transient thread-info object.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 55
diff changeset
   424
    "Modified: / 08-03-2015 / 09:08:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
106
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   425
!
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   426
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   427
isValid
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   428
    ^ group isValid and:[ self isDead not ]
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   429
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   430
    "Created: / 04-02-2018 / 21:31:13 / 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
   431
! !
a85f0c91f164 Some more work on threads (thread status)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   432
70
6d7285bb1703 GDBThread: use native name in thread's displayString
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   433
!GDBThread class methodsFor:'documentation'!
6d7285bb1703 GDBThread: use native name in thread's displayString
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   434
6d7285bb1703 GDBThread: use native name in thread's displayString
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   435
version_HG
6d7285bb1703 GDBThread: use native name in thread's displayString
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   436
6d7285bb1703 GDBThread: use native name in thread's displayString
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   437
    ^ '$Changeset: <not expanded> $'
6d7285bb1703 GDBThread: use native name in thread's displayString
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   438
! !
6d7285bb1703 GDBThread: use native name in thread's displayString
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   439