[squeak-dev] Opening two debuggers in a single doit
Eliot Miranda
eliot.miranda at gmail.com
Thu Jan 25 00:05:11 UTC 2018
Bob,
thank you!! morphicOpenOn:context:label:contents:fullView: is indeed
the method in question. So if one moves the ErrorRecursion := false outside
of the addDeferredUIMessage: block everything works. i.e. now the code
reads:
Project current addDeferredUIMessage:
[ debugger := self new
process: process
controller: nil
context: context.
full
ifTrue: [ debugger openFullNoSuspendLabel: title ]
ifFalse:
[ debugger
openNotifierContents: contentsStringOrNil
label: title ].
debugger errorWasInUIProcess: errorWasInUIProcess.
"Try drawing the debugger tool at least once to avoid freeze."
Project current world displayWorldSafely].
ErrorRecursion := false ].
and the old code doesn't work:
Project current addDeferredUIMessage:
[ debugger := self new
process: process
controller: nil
context: context.
full
ifTrue: [ debugger openFullNoSuspendLabel: title ]
ifFalse:
[ debugger
openNotifierContents: contentsStringOrNil
label: title ].
debugger errorWasInUIProcess: errorWasInUIProcess.
"Try drawing the debugger tool at least once to avoid freeze."
Project current world displayWorldSafely.
ErrorRecursion := false ]].
So there question is, what are the tests for the ErrorGuard and
ErrorRecursion? I need to run these before committing the fix above.
Bob, way to go! Thank you.
On Wed, Jan 24, 2018 at 3:52 PM, Bob Arning <arning315 at comcast.net> wrote:
> I tried this in 5.1 and it worked
>
> Debugger class>>
>
> morphicOpenOn: process context: context label: title contents:
> contentsStringOrNil fullView: full
> "Open a notifier in response to an error, halt, or notify. A notifier
> view just shows a short view of the sender stack and provides a menu that
> lets the user open a full debugger."
>
> | errorWasInUIProcess debugger |
> ErrorRecursion ifTrue: [
> "self assert: process == Project current uiProcess --
> DOCUMENTATION ONLY"
> ErrorRecursion := false.
> "^ Project current handleFatalDrawingError: title"].
> <============commented this out
> ...
>
>
> On 1/24/18 6:31 PM, Eliot Miranda wrote:
>
> Hi All,
>
> I'm comparing two close copies of a class in attempting a complex
> refactoring, comparing the original code with the close copy. In doing
> this I need to open up two debuggers to step through the two computations
> simultaneously. If I try it this way, where the two JITs break at a
> particular bytecode:
>
> [:m :opts|
> [StackToRegisterMappingCogit cog: m options: opts] fork.
> Processor yield.
> AltStackToRegisterMappingCogit cog: m options: opts]
> value: TabbedPalette class>>#unload
> value: #(ObjectMemory Spur64BitCoMemoryManager
> debugBytecodePointers #(59)
> compilationTrace 0).
>
> I get an emergency evaluator :-(, and if I type restart I only ever get
> one debugger. What's the right way to do this?
>
> To boil down the example I need this to work:
>
> [1 halt] fork.
> Processor yield.
> 2 halt
>
> i.e. I want to be able to get two debuggers, one open on 1 halt, and the
> other on 2 halt.
> _,,,^..^,,,_
> best, Eliot
>
>
>
>
>
>
>
--
_,,,^..^,,,_
best, Eliot
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20180124/e18efeaa/attachment.html>
More information about the Squeak-dev
mailing list
|