X
19481 Rate this article:
4.0

New to IDL 8.3: !DEBUG_PROCESS_EVENTS System Variable

Anonym

In IDL 8.3, you can use the !DEBUG_PROCESS_EVENTS system variable to control whether or not IDL generates widget events at breakpoints.  By default, this variable is set to 1 which causes IDL to send widget events even when IDL encounters a STOP statement or breakpoint from the workbench.  You can turn off these events by setting !DEBUG_PROCESS_EVENTS to 0.  This change was made in IDL 8.3 to allow users to interact with IDL 8 Graphics (aka New Graphics) while debugging their programs. For example, if you run the following program (test_process_events_default), you will be able to interact (rotate, zoom, etc) with the surface when IDL is halted at the STOP statement. 

pro test_process_events_default
  !debug_process_events=1 ;default setting
  a=findgen(100)
  ng_sur=surface(hanning(200,200))
  stop ;breakpoint
end

However, if you run the program below (test_process_events_zero), you will not be able to interact with the surface when IDL hits the breakpoint:

pro test_process_events_zero
  !debug_process_events=0
  a=findgen(100)
  ng_sur=surface(hanning(200,200))
  stop ;breakpoint

end

In previous versions of IDL, widget events were stopped when IDL encountered at breakpoints. In IDL 8.3 you may encounter unexpected widget events because the default behavior is different. One example of this type of situation is debugging an application with widget timer events.  For example, if you run the application shown below (break_timer_example) in IDL 8.2, execution will halt at the STOP call and no widget events will be generated.   If you run this code in IDL 8.3 with default settings (!DEBUG_PROCESS_EVENTS=1), timer events will continue to generate even at when IDL encounters the STOP call. 

pro break_timer_example_event, ev
    widget_control, ev.id,get_uvalue=uval
  print, 'timer fired'

  widget_control, ev.top,timer=2
  stop

end

pro break_timer_example
  base = widget_base(/column, uvalue='base')
  widget_control, base, /realize
  xmanager, 'break_timer_example', base, /no_block
 
widget_control, base, timer=2
end
 

I hope that this information will be helpful. Thanks for reading!