[Q][MVC] Debugging/Debugger related change between 3.5 to 3.6?
Sungjin Chun
chunsj at embian.com
Tue Feb 14 02:20:08 UTC 2006
On Feb 14, 2006, at 5:48 AM, Boris Gaertner wrote:
> "Sungjin Chun" <chunsj at embian.com> wrote:
>
>> Hi,
>>
>> Current versions( > 3.6) have problem in debugging session in MVC
>> project. For example,
>>
>> [ #() at: 3 ] fork.
>>
>> like code makes squeak UI unusable. This problem does not happen in
>> <= 3.5 version (But in these versions, there's other problem; the
>> error/debugger window appears after some long delay).
> Yes, exactly. You had to click with the mouse onto the window
> background
> (desktop) of Squeak to bring that window up. That click onto the
> background is processed by the instance of ScreenController that
> is known to the sole instance of ControlManager.
>>
>> Now, here comes my question, what changes are happend between theses
>> versions? Or what part can I refer so that I can make my image(3.8
>> base MVC only image) be not corrupted with above code.
>>
>> Thanks in advance.
>>
>
> This is a difficult question and I still do not have a really good
> answer. However, it may help to point out that MVC has a general
> problem to open a window from a forked process. Try these
> examples:
>
> [ #(#aa #bb) inspect] fork
>
> [ HierarchyBrowser newFor: Boolean ] fork
>
> [Workspace new
> contents: 'This workspace was opened in a forked process.
> This works fine under Morphic, but under MVC it does
> not work properly';
> openLabel: 'Forked Workspace:'] fork
>
> In all these cases, you have to click into the desktop area of Squeak
> to bring up the window. (The desktop ares is region that is not
> covered by a window. An instance of ScreenController processes
> the input for that region).
>
>
> - - - - - - - - - - - - -
>
> These things are difficult and I think it will be really difficult to
> implement inter-process debugging. For your special
> example I found that, in Squeak 3.7 #5989, a modification
> in the following *class* method of Debugger can better the situation:
>
> openOn: process context: context label: title contents:
> contentsStringOrNil
> fullView: bool
> "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."
>
> | controller errorWasInUIProcess |
> Smalltalk isMorphic
> ifTrue: [errorWasInUIProcess _ CurrentProjectRefactoring
> newProcessIfUI:
> process]
> ifFalse: [controller _ ScheduledControllers
> activeControllerProcess ==
> process
> ifTrue: [ScheduledControllers activeController]].
> [
> [ | debugger |
> debugger _ self new process: process controller: controller
> context:
> context.
> bool ifTrue: [debugger openFullNoSuspendLabel: title]
> ifFalse: [debugger openNotifierContents: contentsStringOrNil
> label:
> title.
> controller isNil
> ifTrue: [ScheduledControllers activeControllerProcess suspend]].
> debugger errorWasInUIProcess: errorWasInUIProcess.
> Preferences logDebuggerStackToFile ifTrue: [
> Smalltalk logError: title inContext: context to:
> 'SqueakDebug.log'].
> Smalltalk isMorphic
> ifFalse: [ScheduledControllers searchForActiveController
> "needed since
> openNoTerminate (see debugger #open...) does not set up
> activeControllerProcess if activeProcess (this fork) is not the
> current
> activeControllerProcess (see #scheduled:from:)"].
> ] on: Error do: [:ex |
> self primitiveError:
> 'Orginal error: ',
> title asString, '.
> Debugger error: ',
> ([ex description] on: Error do: ['a ', ex class printString]), ':'
> ]
> ] fork.
> process suspend.
>
> You see that I propose to suspend the active
> controller process if (and only if) it is not the process
> to be debugged. Please try this very carefully
> (that means: after you have made backups of
> all your important things) and let me know
> wheather if facilitates your work.
>
> Gretings,
> Boris
>
>
>
More information about the Squeak-dev
mailing list
|