Initial support for VDB python-based variable objects
Due to a limitation of GDB itself, one cannot create variable
object for "synthetic" argument/local created by custom frame
decorator. Therefore one cannot "dig deeper" and inspect contents
of such a variable in case it is a kind of composite - like an
object on a heap referring to another objects.
This is a problem when a debugee is does not have debug information
and / or it's language is not C - such as when debugging JITed code.
This (experimental) commit adds a parallel implementation of variable
objects done completely in python. This new varobj MI interface is a
super-set of GDB's builtin varobj MI interface.
"
jv:vdb - Visual / VM Debugger
Copyright (C) 2015-now Jan Vrany
This software is licensed under 'Creative Commons Attribution-NonCommercial 4.0 International License'
You may find a full license text in LICENSE.txt or at http://creativecommons.org/licenses/by-nc/4.0/
"
"{ Package: 'jv:vdb' }"
"{ NameSpace: Smalltalk }"
Object subclass:#VDBVirtualMemoryMap
instanceVariableNames:'regions'
classVariableNames:''
poolDictionaries:''
category:'VDB-Tools'
!
!VDBVirtualMemoryMap class methodsFor:'documentation'!
copyright
"
jv:vdb - Visual / VM Debugger
Copyright (C) 2015-now Jan Vrany
This software is licensed under 'Creative Commons Attribution-NonCommercial 4.0 International License'
You may find a full license text in LICENSE.txt or at http://creativecommons.org/licenses/by-nc/4.0/
"
! !
!VDBVirtualMemoryMap class methodsFor:'instance creation'!
fromSysInternalsVmmapDump: aStringOrFilenameOrStream
| s |
s := aStringOrFilenameOrStream readStream.
^ [
self new initializeFromSysInternalsVmmapDump: s
] ensure:[
s close.
].
"Created: / 13-10-2017 / 12:11:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!VDBVirtualMemoryMap methodsFor:'reading'!
initializeFromSysInternalsVmmapDump: aStream
"
Initializes regions from SysInterna's vmmap.exe dump (.mmp)
"
| dump snapshot |
dump := XML::XMLParser parse: aStream.
snapshot := (dump / 'root' / 'Snapshots' / 'Snapshot') last.
regions := (snapshot / 'MemoryRegions' / 'Region')
select:[ :node |
(node @ 'Commit') ~= '0'.
]
thenCollect:[ :node |
| region |
region := VDBVirtualMemoryRegion new
address: (node @ 'Address') asInteger;
size: (node @ 'Size') asInteger;
protection: (node @ 'Protection') asInteger;
comment: (node @ 'Details');
yourself.
] as: OrderedCollection.
regions sort:[ :a :b | a address < b address ].
"Created: / 13-10-2017 / 12:06:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !