Hi guys.

Funny thing that DebugSession does not exists in Squeak. It was introduced
in Pharo to represent the model for debugger.


пт, 11 янв. 2019 г. в 22:34, Thomas Dupriez via Pharo-dev <
pharo-dev@lists.pharo.org>:

> Yeah, it's a bit unfortunate you assumed I wanted to remove the method.
> It brought up a not so pleasant discussion.
> Everyone makes mistakes. :-)
>
> So if I understand, this method gives the pc that maps to the ast node
> the debugger should highlight when a context is selected in the stack
> widget? If I'm right, how comes that this method has no senders in the
> debugger code? That would mean this feature is also implemented
> somewhere else.
>
> Thomas
>
> Le 11/01/2019 à 20:28, Eliot Miranda a écrit :
> > Hi Thomas,
> >
> >    forgive me, my first response was too terse.  Having thought about it
> in the shower it becomes clear :-)
> >
> >> On Jan 11, 2019, at 6:49 AM, Thomas Dupriez <
> tdupr...@ens-paris-saclay.fr> wrote:
> >>
> >> Hi,
> >>
> >> Yes, my question was just of the form: "Hey there's this method in
> DebugSession. What is it doing? What's the intention behind it? Does
> someone know?". There was no hidden agenda behind it.
> >>
> >> @Eliot
> >>
> >> After taking another look at this method, there's something I don't
> understand:
> >>
> >> activePC: aContext
> >> ^ (self isLatestContext: aContext)
> >>          ifTrue: [ interruptedContext pc ]
> >>          ifFalse: [ self previousPC: aContext ]
> >>
> >> isLatestContext: checks whether its argument is the suspended context
> (the context at the top of the stack of the interrupted process). And if
> that's true, activePC: returns the pc of **interruptedContext**, not of the
> suspended context. These two contexts are different when the debugger opens
> on an exception, so this method is potentially returning a pc for another
> context than its argument...
> >>
> >> Another question I have to improve the comment for this method is:
> what's the high-level meaning of this concept of "activePC". You gave the
> formal definition, but what's the point of defining this so to speak? What
> makes this concept interesting enough to warrant defining it and giving it
> a name?
> > There are two “modes” where a pc us mapped to a source range.  One is
> when stepping a context in the debugger (the context is on top and is
> actively executing bytecodes).  Here the debugger stops immediately before
> a send or assignment or return, so that for sends we can do into or over,
> or for assignments or returns check stack top to see what will be assigned
> or returned.  In this mode we want the pc of the send, assign or return to
> map to the source range for the send, or the expression being assigned or
> returned.  Since this is the “common case”, and since this is the only
> choice that makes sense for assignments ta and returns, the bytecode
> compiler constructs it’s pc to source range map in terms of the pc of the
> first byte if the send, assign or return bytecode.
> >
> > The second “mode” is when selecting a context below the top context.
> The pc for any context below the top context will be the return pc for a
> send, because the send has already happened.  The compiler could choose to
> map this pc to the send, but it would not match what works for the common
> case. Another choice would appear be to have two map entries, one for the
> send and one for the return pc, both mapping to the source range.  But this
> wouldn’t work because the result of a send might be assigned or returned
> and so there is a potential conflict.  I stead the reasonable solution is
> to select the previous pc for contexts below the top of context, which will
> be the pc for the start of the send bytecode.
> >
> > HTH
> >
> >> Cheers,
> >> Thomas
> >>
> >>> On 11/01/2019 13:53, Tudor Girba wrote:
> >>> Hi,
> >>>
> >>> @Eliot: Thanks for the clarifying answer.
> >>>
> >>> I believe you might have jumped to conclusion about the intention of
> the question. Thomas asked a legitimate question. Without users of a method
> it is hard to understand its use. It does not necessarily imply that the
> intention is to remove it, but it does show that someone wants to
> understand.
> >>>
> >>> As far as I know, Thomas actually wants to write a test to cover that
> usage. I am sure that you appreciate and encourage that :).
> >>>
> >>> @Thomas: Thanks for this effort!
> >>>
> >>> Cheers,
> >>> Doru
> >>>
> >>>
> >>>> On Jan 10, 2019, at 3:11 PM, Eliot Miranda <eliot.mira...@gmail.com>
> wrote:
> >>>>
> >>>> Hi Thomas,
> >>>>
> >>>>> On Jan 10, 2019, at 2:24 AM, Thomas Dupriez via Pharo-dev <
> pharo-dev@lists.pharo.org> wrote:
> >>>>>
> >>>>> <mime-attachment>
> >>>> in a stack of contexts the active pc is different for the top
> context.  For other than the top context, a context’s pc will be pointing
> after the send that created the context above it, so to find the pc of the
> send one finds the previous pc.  For the top context its pc is the active
> pc.
> >>>>
> >>>> Typically the debugger is invoked in two different modes,
> interruption or exception. When interrupted, a process is stopped at the
> next suspension point (method entry or backward branch) and the top context
> in the process is the context to be displayed in the debugger.  When an
> exception occurs the exception search machinery will find the signaling
> context, the context that raised the exception, which will be below the
> search machinery and the debugger invocation above that. The active pc of
> the signaling context will be the of for the send of digbsl et al.
> >>>>
> >>>> So the distinction is important and the utility method is probably
> useful.
> >>>>
> >>>> Do you want to remove the method simply because there are no senders
> in the image?
> >>>>
> >>>> If so, this is indicative of a serious problem with the Pharo
> development process.  In the summer I ported VMMaker.oscog to Pharo 6.  Now
> as feenk try and build a VMMaker.oscog image on Pharo 7, the system is
> broken, in part because of depreciations and in part because useful methods
> (isOptimisedBlock (isOptimizedBlock?) in the Opal compiler) have been
> removed.
> >>>>
> >>>> Just because a method is not in the image does not imply it is not in
> use.  It simply means that it is not in use in the base image.  As the
> system gets modularised this issue will only increase.  There are lots of
> collection methods that exist as a library that are not used in the base
> image and removing them would clearly damage the library for users.  This
> is the case for lots of so-called system code.  There are users out there,
> like those of us in the vm team, who rely on such system code, and it is
> extremely unsettling and frustrating to have that system code change all
> the time.  If Pharo is to be a useful platform to the vm team it has to be
> more stable.
> >>> --
> >>> www.feenk.com
> >>>
> >>> “The smaller and more pervasive the hardware becomes, the more
> physical the software gets."
> >>>
> >>>
>
>

Reply via email to