[Pharo-project] [ann] glamorous debugger (alpha)
Hi, Over the last following days, Andrei Chis and me have worked on getting the Glamorous Debugger in a usable state (based on the original effort of Toon Verwaest): This debugger is part of the Glamorous Toolkit project, and it is based on Glamour (see the attached screenshots). You can find some details about it here: http://www.humane-assessment.com/blog/announcing-the-glamorous-debugger-alph... Some interesting characteristics: - It has an integrated inspector that shows all variables in one GTInspector with which you can browse in place all relevant variables - Code-wise, the debugger comes with an explicit model that relies neither on the old Debugger nor on the CodeHolder. The model is rather small and intelligible. In total, the entire code totals some 400 lines of code (at the moment). To put it into perspective, the Debugger class has 1096 lines of code (not counting the extra code used by it). Right now, we consider the code to be in a solid alpha, and we need more eyeballs and clicks to test it :). If you are interested in playing with it, you can either find it in the Moose image, or you can load it in Pharo 1.4 via: Gofer new squeaksource: 'glamoroust'; package: 'ConfigurationOfGlamoroust'; load. (Smalltalk at: #ConfigurationOfGlamoroust) loadDevelopment Cheers, Doru -- www.tudorgirba.com "No matter how many recipes we know, we still value a chef."
If you are interested in playing with it, you can either find it in the Moose image, or you can load it in Pharo 1.4 via: Gofer new squeaksource: 'glamoroust'; package: 'ConfigurationOfGlamoroust'; load. (Smalltalk at: #ConfigurationOfGlamoroust) loadDevelopment
is it supposed to load under 2.0? I get an issue with ConfigurationOfRPackage..
No so far only for 1.4 Stef On Nov 25, 2012, at 1:48 AM, Camillo Bruni wrote:
If you are interested in playing with it, you can either find it in the Moose image, or you can load it in Pharo 1.4 via: Gofer new squeaksource: 'glamoroust'; package: 'ConfigurationOfGlamoroust'; load. (Smalltalk at: #ConfigurationOfGlamoroust) loadDevelopment
is it supposed to load under 2.0? I get an issue with ConfigurationOfRPackage..
Hi Doru, that's great news and another sign that Glamour is very powerful. How hard would it be to show the values for the current expression in the list of variables? For example, while debugging the line self doSomething: (value at: 1) with: aStream next I would see in the list of variables the values for the expressions: value at: 1 aStream next On Sun, Nov 25, 2012 at 9:42 AM, Stéphane Ducasse <stephane.ducasse@inria.fr
wrote:
No so far only for 1.4
Stef
On Nov 25, 2012, at 1:48 AM, Camillo Bruni wrote:
If you are interested in playing with it, you can either find it in the
Moose image, or you can load it in Pharo 1.4 via:
Gofer new squeaksource: 'glamoroust'; package: 'ConfigurationOfGlamoroust'; load. (Smalltalk at: #ConfigurationOfGlamoroust) loadDevelopment
is it supposed to load under 2.0? I get an issue with ConfigurationOfRPackage..
-- Damien Cassou http://damiencassou.seasidehosting.st "Success is the ability to go from one failure to another without losing enthusiasm." Winston Churchill
Thanks :). This should not be difficult, and it's a nice idea. Next week, Andrei will be visiting Lille, so perhaps this would be a good opportunity to play with things :). Cheers, Doru On Fri, Nov 30, 2012 at 12:36 PM, Damien Cassou <damien.cassou@gmail.com>wrote:
Hi Doru,
that's great news and another sign that Glamour is very powerful. How hard would it be to show the values for the current expression in the list of variables? For example, while debugging the line
self doSomething: (value at: 1) with: aStream next
I would see in the list of variables the values for the expressions:
value at: 1 aStream next
On Sun, Nov 25, 2012 at 9:42 AM, Stéphane Ducasse < stephane.ducasse@inria.fr> wrote:
No so far only for 1.4
Stef
On Nov 25, 2012, at 1:48 AM, Camillo Bruni wrote:
If you are interested in playing with it, you can either find it in
the Moose image, or you can load it in Pharo 1.4 via:
Gofer new squeaksource: 'glamoroust'; package: 'ConfigurationOfGlamoroust'; load. (Smalltalk at: #ConfigurationOfGlamoroust) loadDevelopment
is it supposed to load under 2.0? I get an issue with ConfigurationOfRPackage..
-- Damien Cassou http://damiencassou.seasidehosting.st
"Success is the ability to go from one failure to another without losing enthusiasm." Winston Churchill
-- www.tudorgirba.com "Every thing has its own flow"
Tudor Girba-2 wrote
Thanks :).
This should not be difficult, and it's a nice idea. Next week, Andrei will be visiting Lille, so perhaps this would be a good opportunity to play with things :).
Dolphin does something like that, showing in the debugger a list of all the objects in call/return stack with pseudonames like _stack1 _stack2 _stack3, etc. It is really helpful to see what is going to be passed to a method or what was its response. Regards! -- Esteban. -- View this message in context: http://forum.world.st/ann-glamorous-debugger-alpha-tp4656643p4657433.html Sent from the Pharo Smalltalk mailing list archive at Nabble.com.
On Fri, Nov 30, 2012 at 3:12 PM, Esteban A. Maringolo <emaringolo@gmail.com>wrote:
It is really helpful to see what is going to be passed to a method or what was its response.
yes, I should have added the following to the list of expressions I want to see a value for: self doSomething: (value at: 1) with: aStream next -- Damien Cassou http://damiencassou.seasidehosting.st "Success is the ability to go from one failure to another without losing enthusiasm." Winston Churchill
Hi all, As I'm playing with the debugger I thought I'll share with you a nice feature the current model supports: scripting the actions In the current version the following code is a rather complicated way of opening a debugger for the code '#(1 2 3 4 5) do: [:each | each asString ]' [ |process| process := Processor activeProcess. UIManager default defer: [ |debugger session| session := SpecDebugger spanNewSessionForProcess: process. "create the model" session errorWasInUIProcess: false. debugger := SpecDebugger debugSession: session. "open the debugger"]. process suspend. "The previous lines open a debugger for this code" #(1 2 3 4 5) do: [:each | each asString ] ] fork. However, the nice thing about the code above is that as the model is completely separated from the ui, the model can be used to script some actions (stepInto, stepThrough, etc) before or after opening the debugger. So in the code bellow using one of the two commented blocks of code, one execute some actions before or after opening the debugger. [ |process| process := Processor activeProcess. UIManager default defer: [ |debugger session| session := SpecDebugger spanNewSessionForProcess: process. "create the model" session errorWasInUIProcess: false. "session stepInto; stepThrough; stepThrough; stepThrough; stepThrough; stepOver; stepInto." debugger := SpecDebugger debugSession: session. "open the debugger" "debugger session confirm: 'Step Into'; stepInto; confirm: '4 * Step Through'; stepThrough; stepThrough; stepThrough; stepThrough; confirm: 'Step Over'; stepOver; confirm: 'Step Into'; stepInto." ]. process suspend. "The previous lines open a debugger for this code" #(1 2 3 4 5) do: [:each | each asString ] ] fork. Also the same model can be used with multiple ui's or the same ui can be reused with different models. Right now this works in Pharo 2.0, but there isn't a configuration for loading it; if someone really wants to try it I can provide instructions of how to load the code. Cheers, Andrei
Beautiful :) Doru On Jan 28, 2013, at 10:15 PM, Andrei Vasile Chis <chisvasileandrei@gmail.com> wrote:
Hi all,
As I'm playing with the debugger I thought I'll share with you a nice feature the current model supports: scripting the actions
In the current version the following code is a rather complicated way of opening a debugger for the code '#(1 2 3 4 5) do: [:each | each asString ]'
[ |process| process := Processor activeProcess. UIManager default defer: [ |debugger session| session := SpecDebugger spanNewSessionForProcess: process. "create the model" session errorWasInUIProcess: false.
debugger := SpecDebugger debugSession: session. "open the debugger"]. process suspend.
"The previous lines open a debugger for this code" #(1 2 3 4 5) do: [:each | each asString ] ] fork.
However, the nice thing about the code above is that as the model is completely separated from the ui, the model can be used to script some actions (stepInto, stepThrough, etc) before or after opening the debugger. So in the code bellow using one of the two commented blocks of code, one execute some actions before or after opening the debugger.
[ |process| process := Processor activeProcess. UIManager default defer: [ |debugger session| session := SpecDebugger spanNewSessionForProcess: process. "create the model" session errorWasInUIProcess: false.
"session stepInto; stepThrough; stepThrough; stepThrough; stepThrough; stepOver; stepInto."
debugger := SpecDebugger debugSession: session. "open the debugger"
"debugger session confirm: 'Step Into'; stepInto; confirm: '4 * Step Through'; stepThrough; stepThrough; stepThrough; stepThrough; confirm: 'Step Over'; stepOver; confirm: 'Step Into'; stepInto." ]. process suspend.
"The previous lines open a debugger for this code" #(1 2 3 4 5) do: [:each | each asString ] ] fork.
Also the same model can be used with multiple ui's or the same ui can be reused with different models. Right now this works in Pharo 2.0, but there isn't a configuration for loading it; if someone really wants to try it I can provide instructions of how to load the code.
Cheers, Andrei
-- www.tudorgirba.com "Sometimes the best solution is not the best solution."
Yes I do :) So cool. Stef On Jan 28, 2013, at 6:15 PM, Andrei Vasile Chis wrote:
Hi all,
As I'm playing with the debugger I thought I'll share with you a nice feature the current model supports: scripting the actions
In the current version the following code is a rather complicated way of opening a debugger for the code '#(1 2 3 4 5) do: [:each | each asString ]'
[ |process| process := Processor activeProcess. UIManager default defer: [ |debugger session| session := SpecDebugger spanNewSessionForProcess: process. "create the model" session errorWasInUIProcess: false.
debugger := SpecDebugger debugSession: session. "open the debugger"]. process suspend.
"The previous lines open a debugger for this code" #(1 2 3 4 5) do: [:each | each asString ] ] fork.
However, the nice thing about the code above is that as the model is completely separated from the ui, the model can be used to script some actions (stepInto, stepThrough, etc) before or after opening the debugger. So in the code bellow using one of the two commented blocks of code, one execute some actions before or after opening the debugger.
[ |process| process := Processor activeProcess. UIManager default defer: [ |debugger session| session := SpecDebugger spanNewSessionForProcess: process. "create the model" session errorWasInUIProcess: false.
"session stepInto; stepThrough; stepThrough; stepThrough; stepThrough; stepOver; stepInto."
debugger := SpecDebugger debugSession: session. "open the debugger"
"debugger session confirm: 'Step Into'; stepInto; confirm: '4 * Step Through'; stepThrough; stepThrough; stepThrough; stepThrough; confirm: 'Step Over'; stepOver; confirm: 'Step Into'; stepInto." ]. process suspend.
"The previous lines open a debugger for this code" #(1 2 3 4 5) do: [:each | each asString ] ] fork.
Also the same model can be used with multiple ui's or the same ui can be reused with different models. Right now this works in Pharo 2.0, but there isn't a configuration for loading it; if someone really wants to try it I can provide instructions of how to load the code.
Cheers, Andrei
First load the model: Gofer new url: 'http://ss3.gemstone.com/ss/DebuggerModel'; package: 'ConfigurationOfDebuggerModel'; load. (Smalltalk at: #ConfigurationOfDebuggerModel) loadDefault. Second from the spec repo from ss3 (http://ss3.gemstone.com/ss/Spec) merge the commit Spec-Widgets-AndreiChis.71 into the image and then load the package Spec-Debugger and you are done. Now the previous examples should work. Also in the pre-debug you may choose to open the spec debugger. Right now the spec interface hasn't got that many features, just the basic actions. ( also in order to see the current selection in the code pane you need to move the mouse over the code pane). The one in glamour is more advance, but for now glamour does not load happily into pharo 2.0 Andrei On Mon, Jan 28, 2013 at 11:12 PM, Stéphane Ducasse < stephane.ducasse@inria.fr> wrote:
Yes I do :) So cool.
Stef
On Jan 28, 2013, at 6:15 PM, Andrei Vasile Chis wrote:
Hi all,
As I'm playing with the debugger I thought I'll share with you a nice feature the current model supports: scripting the actions
In the current version the following code is a rather complicated way of opening a debugger for the code '#(1 2 3 4 5) do: [:each | each asString ]'
[ |process| process := Processor activeProcess. UIManager default defer: [ |debugger session| session := SpecDebugger spanNewSessionForProcess: process. "create the model" session errorWasInUIProcess: false.
debugger := SpecDebugger debugSession: session. "open the debugger"]. process suspend.
"The previous lines open a debugger for this code" #(1 2 3 4 5) do: [:each | each asString ] ] fork.
However, the nice thing about the code above is that as the model is completely separated from the ui, the model can be used to script some actions (stepInto, stepThrough, etc) before or after opening the debugger. So in the code bellow using one of the two commented blocks of code, one execute some actions before or after opening the debugger.
[ |process| process := Processor activeProcess. UIManager default defer: [ |debugger session| session := SpecDebugger spanNewSessionForProcess: process. "create the model" session errorWasInUIProcess: false.
"session stepInto; stepThrough; stepThrough; stepThrough; stepThrough; stepOver; stepInto."
debugger := SpecDebugger debugSession: session. "open the debugger"
"debugger session confirm: 'Step Into'; stepInto; confirm: '4 * Step Through'; stepThrough; stepThrough; stepThrough; stepThrough; confirm: 'Step Over'; stepOver; confirm: 'Step Into'; stepInto." ]. process suspend.
"The previous lines open a debugger for this code" #(1 2 3 4 5) do: [:each | each asString ] ] fork.
Also the same model can be used with multiple ui's or the same ui can be reused with different models. Right now this works in Pharo 2.0, but there isn't a configuration for loading it; if someone really wants to try it I can provide instructions of how to load the code.
Cheers, Andrei
Andrei I will integrate the Spec Widget Changes now. Then I played with the debugger with vanessa and we got a bit lost because the text selection does not show where is the expression currently with over or into. At one point we got to new process and it blocked also everything. So after restarting in a new image we tried run to here and we were confused :) do: aBlock "Refer to the comment in Collection|do:." 1 to: self size do: [:index | aBlock value: (self at: index)] I put the cursor in the block before aBlock and clicked on Run to Here but nothing happened Thanks for your effort this is really important. Stef On Jan 28, 2013, at 7:34 PM, Andrei Vasile Chis wrote:
First load the model: Gofer new url: 'http://ss3.gemstone.com/ss/DebuggerModel'; package: 'ConfigurationOfDebuggerModel'; load. (Smalltalk at: #ConfigurationOfDebuggerModel) loadDefault.
Second from the spec repo from ss3 (http://ss3.gemstone.com/ss/Spec) merge the commit Spec-Widgets-AndreiChis.71 into the image and then load the package Spec-Debugger and you are done.
Now the previous examples should work. Also in the pre-debug you may choose to open the spec debugger. Right now the spec interface hasn't got that many features, just the basic actions. ( also in order to see the current selection in the code pane you need to move the mouse over the code pane).
The one in glamour is more advance, but for now glamour does not load happily into pharo 2.0
Andrei
On Mon, Jan 28, 2013 at 11:12 PM, Stéphane Ducasse <stephane.ducasse@inria.fr> wrote: Yes I do :) So cool.
Stef
On Jan 28, 2013, at 6:15 PM, Andrei Vasile Chis wrote:
Hi all,
As I'm playing with the debugger I thought I'll share with you a nice feature the current model supports: scripting the actions
In the current version the following code is a rather complicated way of opening a debugger for the code '#(1 2 3 4 5) do: [:each | each asString ]'
[ |process| process := Processor activeProcess. UIManager default defer: [ |debugger session| session := SpecDebugger spanNewSessionForProcess: process. "create the model" session errorWasInUIProcess: false.
debugger := SpecDebugger debugSession: session. "open the debugger"]. process suspend.
"The previous lines open a debugger for this code" #(1 2 3 4 5) do: [:each | each asString ] ] fork.
However, the nice thing about the code above is that as the model is completely separated from the ui, the model can be used to script some actions (stepInto, stepThrough, etc) before or after opening the debugger. So in the code bellow using one of the two commented blocks of code, one execute some actions before or after opening the debugger.
[ |process| process := Processor activeProcess. UIManager default defer: [ |debugger session| session := SpecDebugger spanNewSessionForProcess: process. "create the model" session errorWasInUIProcess: false.
"session stepInto; stepThrough; stepThrough; stepThrough; stepThrough; stepOver; stepInto."
debugger := SpecDebugger debugSession: session. "open the debugger"
"debugger session confirm: 'Step Into'; stepInto; confirm: '4 * Step Through'; stepThrough; stepThrough; stepThrough; stepThrough; confirm: 'Step Over'; stepOver; confirm: 'Step Into'; stepInto." ]. process suspend.
"The previous lines open a debugger for this code" #(1 2 3 4 5) do: [:each | each asString ] ] fork.
Also the same model can be used with multiple ui's or the same ui can be reused with different models. Right now this works in Pharo 2.0, but there isn't a configuration for loading it; if someone really wants to try it I can provide instructions of how to load the code.
Cheers, Andrei
Hi Stef, Andrei I will integrate the Spec Widget Changes now. Then I played with the debugger with vanessa and we got a bit lost because
the text selection does not show where is the expression currently with over or into.
This should be fixed now.
At one point we got to new process and it blocked also everything.
Not good. Do you what you deed?
So after restarting in a new image we tried run to here and we were confused :)
do: aBlock "Refer to the comment in Collection|do:." 1 to: self size do: [:index | aBlock value: (self at: index)]
I put the cursor in the block before aBlock and clicked on Run to Here but nothing happened
I will look at this. In theory now it should work like in the current debugger. Also now in the spec interface I get some very strange bugs that are not in the glamour one. Somehow some things do not update ok. I'll dig to see what happens. I'll let you know when I have something more. Andrei
On Jan 31, 2013, at 1:35 PM, Andrei Vasile Chis wrote:
Hi Stef,
Andrei I will integrate the Spec Widget Changes now. Then I played with the debugger with vanessa and we got a bit lost because the text selection does not show where is the expression currently with over or into.
This should be fixed now.
At one point we got to new process and it blocked also everything.
Not good. Do you what you deed?
step into â¦. or something like that until I arrived to newProcess I can restart and retry because I'm a bug attractor.
So after restarting in a new image we tried run to here and we were confused :)
do: aBlock "Refer to the comment in Collection|do:." 1 to: self size do: [:index | aBlock value: (self at: index)]
I put the cursor in the block before aBlock and clicked on Run to Here but nothing happened
I will look at this. In theory now it should work like in the current debugger.
Also now in the spec interface I get some very strange bugs that are not in the glamour one. Somehow some things do not update ok. I'll dig to see what happens.
I'll let you know when I have something more.
Andrei
Hi Stef, The bug with Run to Here should be fixed. This and al the other actions should work just like in the current debugger. This means that when the current debugger breaks they would also break :) There are still some issues with the ui when there is unsaved content in the editor but it is usable. Andrei On Thu, Jan 31, 2013 at 10:16 PM, Stéphane Ducasse < stephane.ducasse@inria.fr> wrote:
On Jan 31, 2013, at 1:35 PM, Andrei Vasile Chis wrote:
Hi Stef,
Andrei I will integrate the Spec Widget Changes now. Then I played with the debugger with vanessa and we got a bit lost
because the text selection does not show
where is the expression currently with over or into.
This should be fixed now.
At one point we got to new process and it blocked also everything.
Not good. Do you what you deed?
step into â¦. or something like that until I arrived to newProcess
I can restart and retry because I'm a bug attractor.
So after restarting in a new image we tried run to here and we were
confused :)
do: aBlock "Refer to the comment in Collection|do:." 1 to: self size do: [:index | aBlock value: (self at: index)]
I put the cursor in the block before aBlock and clicked on Run to Here
but nothing happened
I will look at this. In theory now it should work like in the current
debugger.
Also now in the spec interface I get some very strange bugs that are not
in the glamour one.
Somehow some things do not update ok. I'll dig to see what happens.
I'll let you know when I have something more.
Andrei
Great work, Andrei! Doru On Wed, Feb 13, 2013 at 9:49 AM, Andrei Vasile Chis < chisvasileandrei@gmail.com> wrote:
Hi Stef,
The bug with Run to Here should be fixed. This and al the other actions should work just like in the current debugger. This means that when the current debugger breaks they would also break :)
There are still some issues with the ui when there is unsaved content in the editor but it is usable.
Andrei
On Thu, Jan 31, 2013 at 10:16 PM, Stéphane Ducasse < stephane.ducasse@inria.fr> wrote:
On Jan 31, 2013, at 1:35 PM, Andrei Vasile Chis wrote:
Hi Stef,
Andrei I will integrate the Spec Widget Changes now. Then I played with the debugger with vanessa and we got a bit lost
because the text selection does not show
where is the expression currently with over or into.
This should be fixed now.
At one point we got to new process and it blocked also everything.
Not good. Do you what you deed?
step into â¦. or something like that until I arrived to newProcess
I can restart and retry because I'm a bug attractor.
So after restarting in a new image we tried run to here and we were
confused :)
do: aBlock "Refer to the comment in Collection|do:." 1 to: self size do: [:index | aBlock value: (self at: index)]
I put the cursor in the block before aBlock and clicked on Run to Here
but nothing happened
I will look at this. In theory now it should work like in the current
debugger.
Also now in the spec interface I get some very strange bugs that are
not in the glamour one.
Somehow some things do not update ok. I'll dig to see what happens.
I'll let you know when I have something more.
Andrei
-- www.tudorgirba.com "Every thing has its own flow"
excellent we should push it in 3.0 :)
Hi Stef,
The bug with Run to Here should be fixed. This and al the other actions should work just like in the current debugger. This means that when the current debugger breaks they would also break :)
There are still some issues with the ui when there is unsaved content in the editor but it is usable.
Andrei
On Thu, Jan 31, 2013 at 10:16 PM, Stéphane Ducasse <stephane.ducasse@inria.fr> wrote:
On Jan 31, 2013, at 1:35 PM, Andrei Vasile Chis wrote:
Hi Stef,
Andrei I will integrate the Spec Widget Changes now. Then I played with the debugger with vanessa and we got a bit lost because the text selection does not show where is the expression currently with over or into.
This should be fixed now.
At one point we got to new process and it blocked also everything.
Not good. Do you what you deed?
step into â¦. or something like that until I arrived to newProcess
I can restart and retry because I'm a bug attractor.
So after restarting in a new image we tried run to here and we were confused :)
do: aBlock "Refer to the comment in Collection|do:." 1 to: self size do: [:index | aBlock value: (self at: index)]
I put the cursor in the block before aBlock and clicked on Run to Here but nothing happened
I will look at this. In theory now it should work like in the current debugger.
Also now in the spec interface I get some very strange bugs that are not in the glamour one. Somehow some things do not update ok. I'll dig to see what happens.
I'll let you know when I have something more.
Andrei
On Wed, Feb 13, 2013 at 11:04 AM, stephane ducasse <stephane.ducasse@free.fr> wrote:
excellent we should push it in 3.0 :)
along with Glamour? Or do you want a spec-based UI as well? -- Damien Cassou http://damiencassou.seasidehosting.st "Success is the ability to go from one failure to another without losing enthusiasm." Winston Churchill
On Feb 13, 2013, at 11:09 AM, Damien Cassou <damien.cassou@gmail.com> wrote:
On Wed, Feb 13, 2013 at 11:04 AM, stephane ducasse <stephane.ducasse@free.fr> wrote:
excellent we should push it in 3.0 :)
along with Glamour? Or do you want a spec-based UI as well?
there is already a spec version. We should extend it and refine it.
-- Damien Cassou http://damiencassou.seasidehosting.st
"Success is the ability to go from one failure to another without losing enthusiasm." Winston Churchill
There is both a spec and a glamour interface and both work quite well. After moose is moved to Pharo 2.0 I'll write some configurations to load things nicely. Andrei On Wed, Feb 13, 2013 at 11:15 AM, stephane ducasse <stephane.ducasse@free.fr
wrote:
On Feb 13, 2013, at 11:09 AM, Damien Cassou <damien.cassou@gmail.com> wrote:
On Wed, Feb 13, 2013 at 11:04 AM, stephane ducasse <stephane.ducasse@free.fr> wrote:
excellent we should push it in 3.0 :)
along with Glamour? Or do you want a spec-based UI as well?
there is already a spec version. We should extend it and refine it.
-- Damien Cassou http://damiencassou.seasidehosting.st
"Success is the ability to go from one failure to another without losing enthusiasm." Winston Churchill
participants (7)
-
Andrei Vasile Chis -
Camillo Bruni -
Damien Cassou -
Esteban A. Maringolo -
stephane ducasse -
Stéphane Ducasse -
Tudor Girba