Awesome! 
It works for me. 

The only limitation is that it does update the breakpoint list only in the 
console that has the focus. If another console has a debugging session 
ongoing, its breakpoints will not be updated.

A way to solve this is to replace 

*        shellwidget = self.tabwidget.currentWidget()   *
*        if shellwidget is not None:*
*            shellwidget.shell.reload_breakpoints( filename )*

by
*        for shellwidget in self.shellwidgets:*
*            shellwidget.shell.reload_breakpoints( filename )*

in your patch. 

Sylvain

On Tuesday, April 2, 2013 11:17:02 AM UTC-4, Doug Bonar wrote:
>
> In case it might be useful to someone in a more informal form than a diff, 
> here are the extracted changes as lines of code.  
>
> ---------------------------------------
>
> #
> #  Two pieces which allow the monitor to trigger reloading breakpoints.
> #
>      
> *In monitor.py*
>
>     In Monitor add a function
>     
>     def reload_breakpoints(self, file):
>         if not self.pdb_obj:
>             return 
>         # command defined and patched into place in sitecustomize.py
>         self.pdb_obj.reload_spyder_breakpoints( file )
>
>     and, in Monitor.__init__ register it
>     
>             "reload_breakpoints":self.reload_breakpoints,
>
>
> *sitecustomize.py*
>
>     In SpyderPdb, add in the function for the monitor to use.
>     
>     def reload_spyder_breakpoints(self, filename):
>         # TODO, fix this so that it just adds/removes the diffs, not all 
> bps
>         from spyderlib.config import CONF
>         filename = self.canonic(filename)
>         
>         self.clear_all_file_breaks( filename )
>                 
>         # load in new ones
>         CONF.load_from_ini()
>         if CONF.get('run', 'breakpoints/enabled', True):
>             breakpoints = CONF.get('run','breakpoints', {})
>             for fname, data in breakpoints.iteritems():
>                 fname = self.canonic(fname)
>                 if filename == fname:  # add it
>                     for linenumber, condition in data:
>                         self.set_break(fname, linenumber, 
> cond=condition)   
>      
>      
> #
> #  And three pieces which set it up so that the editor will trigger the 
> loading
> #
>                          
> *plugins/editor.py*
>
>     In Editor.save_breakpoints, add a final line
>     
>         self.emit(SIGNAL("reload_spyder_breakpoints(QString)"), filename)
>   
>
> *externalconsole.py*
>
>     In ExternalConsole.register_plugin, add a new registration
>     
>             self.connect(self.main.editor,
>                          SIGNAL("reload_spyder_breakpoints(QString)"),
>                          self.reload_spyder_breakpoints)
>
>     and in ExternalConsole add the appropriate function
>
>     def reload_spyder_breakpoints(self, filename):
>         # ? Basically, works when the debugger is the top external console
>         # BTW, could do shellwidget.shell.ask_monitor(...)
>         # but the style seems to be to let the shell take care off 
>         # asking the monitor.
>         shellwidget = self.tabwidget.currentWidget()    
>         if shellwidget is not None:
>             shellwidget.shell.reload_breakpoints( filename )
>
>    
> *pythonshell.py*
>
>     In ExtPythonShellWidget, add the function to ask the Monitor
>     
>     def reload_breakpoints(self, file):
>         return self.ask_monitor("reload_breakpoints(r'%s')" % file)
>
>                       
>       
>
>
>
>
> On Tuesday, April 2, 2013 10:35:39 AM UTC-4, Doug Bonar wrote:
>>
>> My local version has some other changes as well, plus in only on 2.1.11.  
>> I'll try doing the same thing in a clean, newer version over the weekend.
>>
>> On Monday, April 1, 2013 6:41:52 PM UTC-4, Sylvain Corlay wrote:
>>>
>>> Great, could you share your patch? I would be interested to test it.
>>> S. 
>>>
>>> On Monday, April 1, 2013 11:43:38 AM UTC-4, Doug Bonar wrote:
>>>>
>>>> I ended up just adding a bit to my local version.
>>>>
>>>> I added a new signal, 'reload_spyder_breakpoints(filename)' to 
>>>> plugins/editor.py and caught it in externalconsole.py.  That then looks at 
>>>> the current tab widget and asks its monitor to run a new function I 
>>>> patched 
>>>> into SpyderPdb in sitecustomize.py.  It touches 4 files, but it didn't 
>>>> seem 
>>>> too hideous.
>>>>
>>>> For now, my patched in function is just clearing all breakpoints for 
>>>> the file using Pdb's clear_all_file_breaks( filename ) and then loading 
>>>> the 
>>>> ones from CONF as the existing set_spyder_breakpoints does.  If I get 
>>>> ambitious, I might change that to leave the ones that are unchanged in 
>>>> place (matching of file, line & condition string) since right now the 
>>>> numbering of all breakpoints in the file changes when you adjust any one.  
>>>> But it is a start.
>>>>
>>>> Doug
>>>>
>>>>
>>>>
>>>> On Thursday, March 7, 2013 4:55:59 PM UTC-5, Doug Bonar wrote:
>>>>>
>>>>> Thanks Jed.  Not the answers I wanted to hear, but glad to know I 
>>>>> wasn't missing anything.
>>>>>
>>>>>
>>>>> On Wednesday, March 6, 2013 5:41:37 PM UTC-5, Doug Bonar wrote:
>>>>>>
>>>>>> Can I set the graphically?
>>>>>>
>>>>>> In spyderlib/plugins/editor.py  I see breakpoint related actions 
>>>>>> being set up, but I can't find the breakpoint_menu anywhere as an actual 
>>>>>> UI 
>>>>>> widget.  That said, F12 does put a dot in the edge of the file -- looks 
>>>>>> like it should be a breakpoint.   Unfortunately, it I start the 
>>>>>> debugger, 
>>>>>> then create a breakpoint, the debugger doesn't seem to see it.  
>>>>>>
>>>>>> So, a 2-part question.
>>>>>> 1)  Is there some way other than F12 to set breakpoints?
>>>>>> 2)  Is there a way to add a breakpoint while the debugger is running?
>>>>>>
>>>>>> Thanks
>>>>>>
>>>>>

-- 
You received this message because you are subscribed to the Google Groups 
"spyder" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/spyderlib?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to