Igor Stasenko wrote:
On 4 August 2012 04:11, Ben Coman <[email protected]> wrote:
As probably many newbies do from time to time, I am learning the system
splattering 'self halt' around, and once again slipped one into the wrong
place where I should have used 'haltOnce' and had a massive number of
pre-debugger windows come up.  I managed to get it back this time with the
user interrupt - but not always - and anyhow clearing so many debug windows
is a pain.  So..... could 'self halt' be made to monitor the rate that the
halt windows appear, and when more than some value from one of them (say
five per second) it starts getting ignored and shows a dialog asking the
user if they really meant this and enable danger mode, or if they screwed up
and want to revert the method containing the suspect 'halt'.


If we look from user's perspective (not machine perspective), apparently
it is pointless to throw so many messages at the user's face, because
he cannot deal with them
in meaningful manner at such rate.
So, i think there should be something like following:
- if exception requires a user interaction, we do show the popup, but
meanwhile remember
the exception which initiated it.
- if there's next exception incoming and also asks UI manager to show
it to user, we queue it,
letting user to deal with first one.. (or we delay the popup , say 1
each 5 seconds).
and finally, a queue should have some reasonable limit, after which we
stop queuing , because again, user certainly won't be willing to waste
his time dealing with 10000000 exceptions of same kind one by one. It
doesn't makes sense anyways.

In such case we can just ignore halt and let program continue (but
increment some counter to show user how many of them are there).
If exception is different (an Error) then on queue overflow, i think
it should terminate the process with exception (but of course, special
care must be taken if process is UI process).
Of course making it too smart is pointless, because it is impossible
to predict whether it is good idea
to terminate process or letting it continue to run in case of exception.
But for that we can have settings and options, to tune that at user's
discretion, as well as default
settings on a per-exception class base.

anyhow, just musing....  -ben


i know by myself how annoying it can be (up to unresponsive image)
and i think most of us is facing such situation time to time (heh..
just yesterday we had it with Camillo while hacking ocompletion
stuff).
i learned to be careful and avoid such situations.. but sometimes it
is hard and better tooling support will be helpful, no doubt.



Another use case that just happened to me. This is not 'halt' related but just a typo... (which suddenly makes the whole system feel a bit fragile) Working on a small new feature in the drawing loop of Roassal, I would guess "all" that I did was leave out a full stop at the end a line. So the image locked and crashed after about 20 seconds. Unfortunately now the image is crashing every time I try to open it. Some mechanism to throttle and temporarily ignore the error to allow me to rectify the problem would have been immensely useful. In this case, perhaps something like blocking the main UI loop and presenting a modal window of a very basic self contained text editor on the offending method. At this moment, another immensely useful tool would be able to diff the source code between a running image and an offline image, and import the changes. Is there any other way I might recover recent changes? Previously I have not had much luck mixing a new image with the changes file fromt he crashed image.

regards -ben


----------------------------------------
THERE_BE_DRAGONS_HERE
MessageNotUnderstood: SmallInteger>>Transcript
25 August 2012 8:58:18.345 am

VM: Win32 - IX86 - 6.1 - CoInterpreter VMMaker-oscog-EstebanLorenzano.158 uuid: 82eded98-68af-4c80-a472-4f6de293adcf May 1 2012, StackToRegisterMappingCogit VMMaker-oscog-EstebanLorenzano.158 uuid: 82eded98-68af-4c80-a472-4f6de293adcf May 1 2012, https://git.gitorious.org/cogvm/blessed.git Commit: 6aa3fd0f1188078d3167dec1a53031a61b97b688 Date: Tue May 1 20:28:14 2012 +0200 By: Esteban Lorenzano <[email protected]>
Image: Pharo1.4 [Latest update: #14457]

SmallInteger(Object)>>doesNotUnderstand: #Transcript
   Receiver: 1
   Arguments and temporary variables:
       aMessage:     Transcript
       exception:     MessageNotUnderstood: SmallInteger>>Transcript
       resumeValue:     nil
   Receiver's instance variables:
1

ROOrthoVerticalLineShape>>lineSegmentsFor:
   Receiver: a ROOrthoVerticalLineShape
   Arguments and temporary variables:

---------------------------------------------------------------------
Sat Aug 25 09:15:38 2012


Error in the VM thread
Reason: out of memory



Hardware information: 
        Manufacturer: Unknown
        Model: Unknown
        Number of processors: 4
        Page size: 4096

Memory Information (upon launch):
        Physical Memory Size: 4194303 kbytes
        Physical Memory Free: 4194303 kbytes
        Page File Size: 4194303 kbytes
        Page File Free: 4194303 kbytes
        Virtual Memory Size: 2097024 kbytes
        Virtual Memory Free: 2030848 kbytes
        Memory Load: 21 percent

Processor 0: AMD A10-4600M APU with Radeon(tm) HD Graphics  
        Identifier: AMD64 Family 21 Model 16 Stepping 1
        ~MHZ: 2295

Processor 1: AMD A10-4600M APU with Radeon(tm) HD Graphics  
        Identifier: AMD64 Family 21 Model 16 Stepping 1
        ~MHZ: 2295

Processor 2: AMD A10-4600M APU with Radeon(tm) HD Graphics  
        Identifier: AMD64 Family 21 Model 16 Stepping 1
        ~MHZ: 2295

Processor 3: AMD A10-4600M APU with Radeon(tm) HD Graphics  
        Identifier: AMD64 Family 21 Model 16 Stepping 1
        ~MHZ: 2295

Operating System: Windows 7 Home Premium (Build 7601 Service Pack 1)
        Registered Owner: Ben
        Registered Company: Toshiba
        SP major version: 1
        SP minor version: 0
        Suite mask: 300
        Product type: 1

Display Information: 
        Graphics adapter name: AMD Radeon HD 7660G
        Primary monitor resolution: 1366 x 768

Device: RDPDD Chained DD
        Adapter String: ???
        Bios String: ???
        Chip Type: ???
        DAC Type: ???
        Memory Size: 0xFFFFFFFF

Driver Versions:
        RDPDD: 

VM Version: Cog VM 4.0.0 (release) from May  1 2012
Compiler: gcc 4.5.2
Interpreter Build: CoInterpreter VMMaker-oscog-EstebanLorenzano.158 uuid: 
82eded98-68af-4c80-a472-4f6de293adcf May  1 2012
Cogit Build: StackToRegisterMappingCogit VMMaker-oscog-EstebanLorenzano.158 
uuid: 82eded98-68af-4c80-a472-4f6de293adcf May  1 2012
Source Version: https://git.gitorious.org/cogvm/blessed.git Commit: 
6aa3fd0f1188078d3167dec1a53031a61b97b688 Date: Tue May 1 20:28:14 2012 +0200 
By: Esteban Lorenzano <[email protected]>

Current byte code: 208
Primitive index: 0

Loaded plugins:

Module information:
        00400000 - 005ec000: C:\Smalltalk\moose47-20120728-(StepCIM)\CogVM.exe
        04180000 - 04280000: CogCode
        695f0000 - 696d7000: C:\windows\system32\DDRAW.dll
        69770000 - 69838000: C:\windows\system32\OPENGL32.DLL
        6c240000 - 6c267000: C:\windows\system32\crtdll.dll
        719d0000 - 71a50000: C:\windows\system32\uxtheme.dll
        721c0000 - 72244000: 
C:\windows\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_5.82.7601.17514_none_ec83dffa859149af\COMCTL32.dll
        72250000 - 7228c000: C:\windows\system32\OLEACC.dll
        72290000 - 722e1000: C:\windows\system32\WINSPOOL.DRV
        723d0000 - 723d9000: C:\windows\system32\VERSION.dll
        728f0000 - 72922000: C:\windows\system32\WINMM.dll
        729b0000 - 729e8000: C:\Program Files\Listary\ListaryHook32.dll
        730c0000 - 730d3000: C:\windows\system32\dwmapi.dll
        73150000 - 732ee000: 
C:\windows\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.7601.17514_none_41e6975e2bd6f2b2\comctl32.DLL
        73640000 - 73662000: C:\windows\system32\GLU32.dll
        73670000 - 73695000: C:\windows\system32\dinput.dll
        73830000 - 73836000: C:\windows\system32\DCIMAN32.dll
        74170000 - 74177000: C:\windows\system32\WSOCK32.DLL
        74310000 - 74315000: C:\windows\system32\SHFolder.dll
        746c0000 - 746cc000: C:\windows\syswow64\CRYPTBASE.dll
        746d0000 - 74730000: C:\windows\syswow64\SspiCli.dll
        74730000 - 74742000: C:\windows\syswow64\DEVOBJ.dll
        74750000 - 74860000: C:\windows\syswow64\kernel32.dll
        74860000 - 74960000: C:\windows\syswow64\USER32.dll
        74960000 - 7496a000: C:\windows\syswow64\LPK.dll
        74970000 - 749b6000: C:\windows\syswow64\KERNELBASE.dll
        74a20000 - 74a47000: C:\windows\syswow64\CFGMGR32.dll
        74a50000 - 74bac000: C:\windows\syswow64\OLE32.dll
        74bb0000 - 74bb6000: C:\windows\syswow64\NSI.dll
        74bc0000 - 74c50000: C:\windows\syswow64\GDI32.dll
        74c50000 - 74ced000: C:\windows\syswow64\USP10.dll
        74cf0000 - 74d50000: C:\windows\system32\IMM32.DLL
        74f00000 - 74f19000: C:\windows\SysWOW64\sechost.dll
        750e0000 - 751ac000: C:\windows\syswow64\MSCTF.dll
        752d0000 - 75327000: C:\windows\syswow64\SHLWAPI.dll
        75380000 - 7542c000: C:\windows\syswow64\msvcrt.dll
        75430000 - 75465000: C:\windows\syswow64\WS2_32.dll
        754a0000 - 75540000: C:\windows\syswow64\ADVAPI32.DLL
        755d0000 - 7564b000: C:\windows\syswow64\COMDLG32.DLL
        75650000 - 757ed000: C:\windows\syswow64\SETUPAPI.dll
        757f0000 - 7643a000: C:\windows\syswow64\SHELL32.dll
        76590000 - 76680000: C:\windows\syswow64\RPCRT4.dll
        76690000 - 7671f000: C:\windows\syswow64\OLEAUT32.dll
        76720000 - 76725000: C:\windows\syswow64\psapi.dll
        76ff0000 - 77170000: C:\windows\SysWOW64\ntdll.dll

Primitive trace:
parameterAt:put:
parameterAt:put:
setGCBiasToGrowGCLimit:
setGCBiasToGrow:


Stack backtrace:
        [0041E90D] ??? + 125197 in CogVM.exe
        [00442022] ??? + 270370 in CogVM.exe
        [004443F9] ??? + 279545 in CogVM.exe
        [00445136] ??? + 282934 in CogVM.exe
        [0043F735] ??? + 259893 in CogVM.exe
        [0044BE49] ??? + 310857 in CogVM.exe
        [0044CC2C] ??? + 314412 in CogVM.exe
        [00537726] ??? + 1275686 in CogVM.exe
        [004010DB] ??? + 4315 in CogVM.exe
        [00401158] ??? + 4440 in CogVM.exe
        [7476339A] AcquireSRWLockExclusive + 18 in kernel32.dll
        [77029EF2] RtlInsertElementGenericTableAvl + 99 in ntdll.dll
        [77029EC5] RtlInsertElementGenericTableAvl + 54 in ntdll.dll
        [00000000] ??? + 0 in (null)


Smalltalk stack dump:
  0x1f00dc I SmalltalkImage>clearExternalObjects 71623188: a(n) SmalltalkImage
  0x1f0108 I SmalltalkImage>snapshot:andQuit: 71623188: a(n) SmalltalkImage
0x12105644 s [] in WorldState class>saveSession
0x121056a0 s BlockClosure>ensure:
0x120a7ed4 s CursorWithMask(Cursor)>showWhile:
0x120a7e68 s WorldState class>saveSession
0x121056fc s [] in ToggleMenuItemMorph(MenuItemMorph)>invokeWithEvent:
0x12105758 s BlockClosure>ensure:
0x120a7df8 s CursorWithMask(Cursor)>showWhile:
0x120a7d88 s ToggleMenuItemMorph(MenuItemMorph)>invokeWithEvent:
0x121057b4 s ToggleMenuItemMorph(MenuItemMorph)>mouseUp:
0x12105810 s ToggleMenuItemMorph(MenuItemMorph)>handleMouseUp:
0x1210586c s MouseButtonEvent>sentTo:
0x121058c8 s ToggleMenuItemMorph(Morph)>handleEvent:
0x12105924 s MorphicEventDispatcher>dispatchDefault:with:
0x12105980 s MorphicEventDispatcher>dispatchEvent:with:
0x121059dc s ToggleMenuItemMorph(Morph)>processEvent:using:
0x12105a38 s MorphicEventDispatcher>dispatchDefault:with:
0x12105a94 s MorphicEventDispatcher>dispatchEvent:with:
0x12105af0 s MenuMorph(Morph)>processEvent:using:
0x12105b4c s MenuMorph(Morph)>processEvent:
0x12105ba8 s MenuMorph>handleFocusEvent:
0x12105c04 s [] in HandMorph>sendFocusEvent:to:clear:
0x12105c60 s [] in PasteUpMorph>becomeActiveDuring:
0x12105cbc s BlockClosure>on:do:
0x120a7c10 s PasteUpMorph>becomeActiveDuring:
0x120a7b98 s HandMorph>sendFocusEvent:to:clear:
0x12105d18 s HandMorph>sendEvent:focus:clear:
0x120a7b24 s HandMorph>sendMouseEvent:
0x12105d74 s HandMorph>handleEvent:
0x12105dd0 s HandMorph>processEvents
0x12105e2c s [] in WorldState>doOneCycleNowFor:
0x12105e88 s Array(SequenceableCollection)>do:
0x12105ee4 s WorldState>handsDo:
0x120a79cc s WorldState>doOneCycleNowFor:
0x12105f40 s WorldState>doOneCycleFor:
0x12105f9c s PasteUpMorph>doOneCycle
 0xb289e94 s [] in MorphicUIManager>spawnNewProcess
 0xb289e10 s [] in BlockClosure>newProcess

Reply via email to