[Glass] How can I get the start/end of a step in a GsContext?
Mariano Martinez Peck via Glass
glass at lists.gemtalksystems.com
Fri Nov 3 21:14:31 PDT 2017
Cool. It did work. Now my web debugger is way cooler. See attached
screenshot.
BTW, wouldn't this be nice additions to add directly to GsContext? I added
this standalone methods and they seem to work:
Below method is a simplified version of tODE one assuming the data we have
in the GsContext and to avoid calling other methods we do not have here.
calculateSelectionRange
| stepPoint begin end frameContents |
frameContents := continuation _frameContentsAt: level.
(method respondsTo: #'_stepPointForIp:level:isNative:')
ifTrue: [
stepPoint := method
perform: #'_stepPointForIp:level:isNative:'
withArguments:
{(frameContents at: 2).
level.
(continuation _nativeStack)} ]
ifFalse: [
"v3.3"
stepPoint := method
perform: #'_stepPointForIp:level:useNext:'
withArguments:
{(frameContents at: 2).
level.
(continuation _nativeStack)} ].
begin := method _sourceOffsetsAt: stepPoint.
end := self calculateSourceRangeEnd: begin in: method sourceString.
^ begin to: end
Below one is exact copy from tODE one.
calculateSourceRangeEnd: start in: string
| scan i char characterStack beginners enders |
i := start.
(string at: i) = $^
ifTrue: [ ^ string size - 1 ].
(char := string at: i) isCompilerSpecial
ifTrue: [
^ (i < string size and: [ (char := string at: i + 1)
isCompilerSpecial ])
ifTrue: [ i + 1 ]
ifFalse: [ i ] ].
scan := true.
[ scan ]
whileTrue: [
[ i <= string size and: [ (string at: i) isSeparator ] ]
whileTrue: [ i := i + 1 ].
[
i <= string size
and: [ (char := string at: i) isAlphaNumeric or: [ char = $_ ] ] ]
whileTrue: [ i := i + 1 ].
char = $:
ifFalse: [ ^ i - 1 ].
scan := start == 1.
scan
ifTrue: [ i := i + 1 ] ].
characterStack := OrderedCollection new.
beginners := String
with: $'
with: $"
with: $(
with: $[.
enders := String with: $) with: $].
[
i := i + 1.
i < string size ]
whileTrue: [
char := string at: i.
characterStack isEmpty
ifTrue: [
(char = $. or: [ char = $; ])
ifTrue: [ ^ i - 1 ].
(beginners includes: char)
ifTrue: [ characterStack addLast: char ]
ifFalse: [
(enders includes: char)
ifTrue: [ ^ i - 1 ] ] ]
ifFalse: [
(characterStack last = $' or: [ characterStack last = $" ])
ifTrue: [
char = characterStack last
ifTrue: [ characterStack removeLast ] ]
ifFalse: [
(beginners includes: char)
ifTrue: [ characterStack addLast: char ]
ifFalse: [
(characterStack last = $( and: [ char = $) ])
ifTrue: [ characterStack removeLast ]
ifFalse: [
(characterStack last = $[ and: [ char = $] ])
ifTrue: [ characterStack removeLast ] ] ] ] ] ].
^ i - 1
On Fri, Nov 3, 2017 at 7:15 PM, Dale Henrichs via Glass <
glass at lists.gemtalksystems.com> wrote:
> Mariano,
> Take a look at TDStackFrame>>calculateSelectionRange ...
>
> You can easily look at the implementation of the debugger ... in the text
> pane that has the highlighted source from the debugger, use the `Window >
> inspect builder` menu item to bring up the code that implements that pane
> ... you'll get an inspector on something like this:
>
> Inspect aTDStackFrameMethodElementBuilder/
> --------------------
> . -> aTDStackFrameMethodElementBuilder
> (class)@ -> TDStackFrameMethodElementBuilder
> (oop)@ -> 204640769
> formatOnAccept@ -> nil
> formatOnDisplay@ -> nil
> object@ -> SmallInteger(Object)>>_doesNotUnderstand:args:envId:reason:
> @7 line 12
> objectBlock@ -> nil
> theEditorSpec@ -> aTDEditorSpec
> theWindowLocation@ -> nil
> theWindowName@ -> nil
>
> and then clicking on the `object` field, you'll find what I think your are
> looking for:
>
> Inspect aTDStackFrameMethodElementBuilder/SmallInteger(Object)>>_
> doesNotUnderstand:args:envId:reason: @7 line 12/
> --------------------
> . -> SmallInteger(Object)>>_doesNotUnderstand:args:envId:reason:
> @7 line 12
> .. -> aTDStackFrameMethodElementBuilder
> (class)@ -> TDStackFrame
> (oop)@ -> 197204737
> argAndTempNames@ -> anArray( 'aSymbol', 'anArray', 'aSmallInt',
> 'dnuKind', '.t1', '.t2')
> frameContents@ -> anArray( aGsNMethod, 144, nil, nil, nil, nil, nil, 2,
> anArray( #'aSymbol', #'anArray', #'aSmallInt', #'dnuKind', '.t1', '.t2'),
> 2, #'foo'...
> frameIndex@ -> 5
> next@ -> Executed Code
> previous@ -> SmallInteger(Object)>>doesNotUnderstand: @10 line 10
> selectionRange@ -> anInterval( 579, 580, 581, 582, 583, 584, 585, 586,
> 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601,
> 602, 603, ...
> stack@ -> error printing
>
> You will see that the object behind the text pane is a TDStackFrame with
> an instance variable selectionRange ... and that should lead you to
> TDStackFrame>>calculateSelectionRange....
>
> Most of the raw information you will need is in the frameContents that you
> can get from the continuation instance ...
>
> Hope this helps,
>
> Dale
>
>
> On 11/3/17 2:22 PM, Mariano Martinez Peck via Glass wrote:
>
> Hi guys,
>
> Imagine the debugger prints
>
> "8. [] in DpQuuveProductionWalkbackErrorHandler(WAExceptionHandler)>>handleExceptionsDuring:
> @7 line 8"
>
> I manage to get to do doing some hack like this:
>
> (self instVarNamed: 'continuation' ) _reportAt: 8
>
> I understand 7 is the step pointer and 8 is the line number. The debugger
> knows where to start and where to stop that part of the step. See attached
> picture. See the blue text? how can I ask that to the GsContext ?
>
> Thanks in advance,
>
> --
> Mariano
> http://marianopeck.wordpress.com
>
>
> _______________________________________________
> Glass mailing listGlass at lists.gemtalksystems.comhttp://lists.gemtalksystems.com/mailman/listinfo/glass
>
>
>
> _______________________________________________
> Glass mailing list
> Glass at lists.gemtalksystems.com
> http://lists.gemtalksystems.com/mailman/listinfo/glass
>
>
--
Mariano
http://marianopeck.wordpress.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.gemtalksystems.com/mailman/private/glass/attachments/20171104/e0e40852/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Screen Shot 2017-11-04 at 1.11.56 AM.png
Type: image/png
Size: 273832 bytes
Desc: not available
URL: <http://lists.gemtalksystems.com/mailman/private/glass/attachments/20171104/e0e40852/attachment-0001.png>
More information about the Glass
mailing list