Do not show address for (pseudo) instructions with no code
While such instructions do not appear in GDB-produced disassembly,
they may appear in some manually-generated instruction lists.
One example of such (pseudo) instruction is label.
"
jv:libgdbs - GNU Debugger Interface Library
Copyright (C) 2015-now Jan Vrany
Copyright (C) 2020 LabWare
Copyright (C) 2022 LabWare
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the 'Software'), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
"
"{ Package: 'jv:vdb' }"
"{ NameSpace: Smalltalk }"
AbstractSettingsApplication subclass:#VDBSettingsApplication
instanceVariableNames:'infoPanel gdbCommand'
classVariableNames:''
poolDictionaries:''
category:'VDB-UI-Others'
!
!VDBSettingsApplication class methodsFor:'documentation'!
copyright
"
jv:libgdbs - GNU Debugger Interface Library
Copyright (C) 2015-now Jan Vrany
Copyright (C) 2020 LabWare
Copyright (C) 2022 LabWare
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the 'Software'), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
"
! !
!VDBSettingsApplication class methodsFor:'initialization'!
initialize
Smalltalk isInitialized ifTrue: [
self installInSettings
] ifFalse: [
Smalltalk addStartBlock:[ self installInSettings ]
].
"Created: / 23-06-2005 / 09:27:10 / masca"
"Modified: / 17-11-2020 / 15:00:46 / Jan Vrany <jan.vrany@labware.com>"
!
installInSettings
AbstractLauncherApplication
addSettingsApplicationByClass:self name withName:(self classResources string: 'Tools/Visual VM Debugger') icon:self defaultIcon
"Created: / 23-06-2005 / 09:27:10 / masca"
"Modified: / 10-04-2018 / 16:56:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 17-11-2020 / 15:00:59 / Jan Vrany <jan.vrany@labware.com>"
! !
!VDBSettingsApplication class methodsFor:'help specs'!
helpSpec
"This resource specification was automatically generated
by the UIHelpTool of ST/X."
"Do not manually edit this!! If it is corrupted,
the UIHelpTool may not be able to read the specification."
"
UIHelpTool openOnClass:VDBSettingsApplication
"
<resource: #help>
^ super helpSpec addPairsFrom:#(
#ExecutableLabel
'Path to GDB executable. If left empty, system GDB is used.'
)
! !
!VDBSettingsApplication class methodsFor:'interface specs'!
windowSpec
"This resource specification was automatically generated
by the UIPainter of ST/X."
"Do not manually edit this!! If it is corrupted,
the UIPainter may not be able to read the specification."
"
UIPainter new openOnClass:VDBSettingsApplication andSelector:#windowSpec
VDBSettingsApplication new openInterface:#windowSpec
VDBSettingsApplication open
"
<resource: #canvas>
^
#(FullSpec
name: windowSpec
uuid: '44956520-937c-11e9-8e2a-606720e43e2c'
window:
(WindowSpec
label: 'Java Settings'
name: 'Java Settings'
uuid: '10c0dbf1-3cd7-11e8-882f-0021ccd5e3d3'
min: (Point 10 10)
bounds: (Rectangle 0 0 695 627)
)
component:
(SpecCollection
collection: (
(LabelSpec
label: ' Visual/VM Debugger Settings'
name: 'SettingsTitle'
layout: (LayoutFrame 0 0 0 0 0 1 66 0)
style: (FontDescription helvetica medium roman 18 #'iso10646-1' nil nil)
uuid: '10c0dbf2-3cd7-11e8-882f-0021ccd5e3d3'
backgroundColor: (Color 100.0 100.0 100.0)
translateLabel: true
adjust: left
)
(LabelSpec
label: 'Icon'
name: 'Icon'
layout: (LayoutFrame -75 1 0 0 0 1 66 0)
uuid: '10c10300-3cd7-11e8-882f-0021ccd5e3d3'
hasCharacterOrientedLabel: false
backgroundColor: (Color 100.0 100.0 100.0)
translateLabel: true
labelChannel: libjavaCupIcon
)
(SubCanvasSpec
name: 'InfoPanel'
layout: (LayoutFrame 0 0 67 0 0 1 107 0)
uuid: '10c10301-3cd7-11e8-882f-0021ccd5e3d3'
level: 0
initiallyInvisible: true
hasHorizontalScrollBar: false
hasVerticalScrollBar: false
clientKey: infoPanel
createNewBuilder: false
)
(VerticalPanelViewSpec
name: 'Controls'
layout: (LayoutFrame 10 0 70 0 -10 1 0 1)
uuid: '10c10302-3cd7-11e8-882f-0021ccd5e3d3'
horizontalLayout: fit
verticalLayout: top
horizontalSpace: 3
verticalSpace: 3
component:
(SpecCollection
collection: (
(ViewSpec
name: 'Spacer1'
uuid: 'fed33671-91af-11e9-b25b-606720e43e2c'
extent: (Point 675 15)
)
(ViewSpec
name: 'CommandPane'
uuid: '7628c0d0-c755-11e8-8f9c-0021ccd5e3d3'
component:
(SpecCollection
collection: (
(LabelSpec
label: ''';gdb'' command:'
name: 'CommandLabel'
layout: (LayoutFrame 0 0 0 0 120 0 0 1)
uuid: 'fed33672-91af-11e9-b25b-606720e43e2c'
translateLabel: true
adjust: left
)
(FilenameInputFieldSpec
name: 'Command'
layout: (LayoutFrame 120 0 0 0 -100 1 0 1)
uuid: '7628c0d2-c755-11e8-8f9c-0021ccd5e3d3'
model: gdbCommand
immediateAccept: true
acceptOnPointerLeave: true
emptyFieldReplacementText: 'Autodetect'
)
(ActionButtonSpec
label: 'Browse'
name: 'BrowseButton'
layout: (LayoutFrame -100 1 0 0 -8 1 0 1)
uuid: '7628c0d3-c755-11e8-8f9c-0021ccd5e3d3'
translateLabel: true
model: doSelectExecutable
)
)
)
extent: (Point 675 25)
)
(ViewSpec
name: 'Spacer2'
uuid: '7628c0d4-c755-11e8-8f9c-0021ccd5e3d3'
extent: (Point 675 15)
)
(ViewSpec
name: 'vdbinit'
uuid: '85b08540-936c-11e9-ac6c-606720e43e2c'
component:
(SpecCollection
collection: (
(LabelSpec
label: 'VDB init script'
name: 'Label1'
layout: (LayoutFrame 0 0 -1 0 0 1 24 0)
uuid: '85b08541-936c-11e9-ac6c-606720e43e2c'
translateLabel: true
adjust: left
)
(LinkButtonSpec
label: 'LinkButton'
name: 'EditPreferences'
layout: (LayoutFrame 0 0 28 0 -100 1 58 0)
uuid: '85b08542-936c-11e9-ac6c-606720e43e2c'
foregroundColor: (Color 0.0 0.0 100.0)
translateLabel: true
labelChannel: vdbinitAspect
adjust: left
model: doEditVDBinit
)
(ActionButtonSpec
label: 'Edit'
name: 'Button1'
layout: (LayoutFrame -106 1 33 0 -6 1 58 0)
uuid: '85b08543-936c-11e9-ac6c-606720e43e2c'
translateLabel: true
model: doEditVDBinit
)
)
)
extent: (Point 675 70)
)
(ViewSpec
name: 'Spacer3'
uuid: '7628c0d4-c755-11e8-8f9c-0021ccd5e3d3'
extent: (Point 675 15)
)
(ViewSpec
name: 'gdbinit'
uuid: '85b08544-936c-11e9-ac6c-606720e43e2c'
component:
(SpecCollection
collection: (
(LabelSpec
label: 'GDB init script'
name: 'Label2'
layout: (LayoutFrame 0 0 -1 0 0 1 24 0)
uuid: '85b08545-936c-11e9-ac6c-606720e43e2c'
translateLabel: true
adjust: left
)
(LinkButtonSpec
label: 'LinkButton'
name: 'Button2'
layout: (LayoutFrame 0 0 28 0 -100 1 58 0)
uuid: '85b08546-936c-11e9-ac6c-606720e43e2c'
foregroundColor: (Color 0.0 0.0 100.0)
translateLabel: true
labelChannel: gdbinitAspect
adjust: left
model: doEditGDBinit
)
(ActionButtonSpec
label: 'Edit'
name: 'Button3'
layout: (LayoutFrame -106 1 33 0 -6 1 58 0)
uuid: '85b08547-936c-11e9-ac6c-606720e43e2c'
translateLabel: true
model: doEditGDBinit
)
)
)
extent: (Point 675 70)
)
)
)
)
)
)
)
! !
!VDBSettingsApplication methodsFor:'actions'!
doEditGDBinit
| file |
file := VDBDebuggerApplication gdbUserInitFile.
file exists ifFalse: [
file directory isWritable ifTrue: [
file createAsEmptyFile.
].
].
VDBScatchPadApplication openOnFile:file
"Modified: / 21-06-2019 / 10:10:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 16-11-2020 / 22:17:14 / Jan Vrany <jan.vrany@labware.com>"
!
doEditVDBinit
| user default userEditor defaultEditor workspaceView workspace |
workspace := VDBScatchPadApplication new.
user := VDBDebuggerApplication vdbUserInitFile.
default := VDBDebuggerApplication vdbDefaultInitFile.
user exists ifFalse:[
default copyTo:user.
].
userEditor := Tools::CodeView2 new.
userEditor name:#Workspace.
workspace
loadFile:user
encoding:nil
into:userEditor.
defaultEditor := Tools::CodeView2 new.
workspace
loadFile:default
encoding:nil
into:defaultEditor.
defaultEditor readOnly:true.
workspaceView := VariableHorizontalPanel new.
workspaceView addComponent:userEditor.
workspaceView addComponent:defaultEditor.
workspace := VDBScatchPadApplication new.
workspace workspaces add:workspaceView.
workspace syntax:SmalltalkLanguage instance.
workspace open.
workspace window
label:(resources string:'.vdbinit.st - User : vdbinit.st - Default')
"Modified: / 16-11-2020 / 22:21:11 / Jan Vrany <jan.vrany@labware.com>"
!
doSelectExecutable
| guess executable |
guess := self gdbCommand value asNilIfEmpty.
guess isNil ifTrue:[
guess := GDBProcess gdbCommand
].
[ guess notNil and:[ (guess := guess asFilename) exists not ] ] whileTrue:[
| p |
p := guess directory.
(p notNil and:[ p pathName = guess pathName ]) ifTrue:[
p := nil.
].
guess := p.
].
guess isNil ifTrue:[
guess := GDBProcess gdbCommand
].
executable := Dialog requestFileName:(resources string:'Select GDB executable') default: guess ifFail:[ ^ self ].
self infoPanel hide.
(executable includes: Character space) ifTrue:[
executable := '"' , executable , '"'.
].
self gdbCommand value: executable
"Created: / 03-10-2018 / 22:46:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 18-06-2019 / 10:42:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!VDBSettingsApplication methodsFor:'aspects'!
aspects
^ #(gdbCommand)
"Created: / 10-04-2018 / 16:53:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 17-06-2019 / 13:38:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
gdbCommand
"return/create the 'gdbCommand' value holder (automatically generated)"
gdbCommand isNil ifTrue:[
gdbCommand := ValueHolder new.
gdbCommand onChangeSend:#doCheckSettings to:self.
gdbCommand onChangeSend:#updateModifiedChannel to:self.
].
^ gdbCommand
"
UserPreferences current gdbCommand
"
"Modified: / 18-06-2019 / 11:16:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
gdbinitAspect
<resource: #uiAspect>
^ VDBDebuggerApplication gdbUserInitFile pathName
"Modified: / 20-06-2019 / 16:24:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
infoPanel
infoPanel isNil ifTrue:[
infoPanel := Tools::InlineMessageDialog new.
].
^ infoPanel
"Created: / 10-04-2018 / 16:52:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
vdbinitAspect
<resource: #uiAspect>
^ VDBDebuggerApplication vdbUserInitFile pathName
"Modified: / 20-06-2019 / 16:25:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!VDBSettingsApplication methodsFor:'checks'!
doCheckCommand
"Check `hg` command. Return true if `hg` command exists
and of supported version, false otherwise."
| command |
command := self gdbCommand value.
command isEmptyOrNil ifTrue:[
command := GDBProcess gdbCommandDefault.
command isNil ifTrue:[
self infoPanel
reset;
beWarning;
message: (resources string:'Cannot find path to `gdb` command');
addButtonWithLabel: (self resources string:'Browse') action: [ self doSelectExecutable ];
show.
^ false
].
].
[
GDBProcess gdbCommandParseAndValidate:command
] on: GDBError do:[:ex |
self infoPanel
reset;
beWarning;
message: (resources string:ex description);
addButtonWithLabel: (self resources string:'Browse') action: [self infoPanel hide. self doSelectExecutable ];
show.
^ false
].
^ true.
"Created: / 18-06-2019 / 10:47:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
doCheckSettings
self doCheckCommand ifFalse:[ ^ self ].
self infoPanel hide.
"Created: / 18-06-2019 / 10:45:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!VDBSettingsApplication methodsFor:'hooks'!
commonPostOpen
self doCheckSettings
"Created: / 18-06-2019 / 10:44:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!VDBSettingsApplication methodsFor:'protocol'!
basicSaveSettings
self gdbCommand value = '' ifTrue:[
self gdbCommand setValue: nil
].
super basicSaveSettings.
"Created: / 04-10-2018 / 09:46:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 17-06-2019 / 13:40:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!VDBSettingsApplication class methodsFor:'documentation'!
version_HG
^ '$Changeset: <not expanded> $'
! !
VDBSettingsApplication initialize!