6 """ |
6 """ |
7 Module implementing a widget containing various debug related views. |
7 Module implementing a widget containing various debug related views. |
8 |
8 |
9 The views avaliable are: |
9 The views avaliable are: |
10 <ul> |
10 <ul> |
11 <li>variables viewer for global variables</li> |
11 <li>selector showing all connected debugger backends</li> |
12 <li>variables viewer for local variables</li> |
12 <li>variables viewer for global variables for the selected debug client</li> |
|
13 <li>variables viewer for local variables for the selected debug client</li> |
|
14 <li>call stack viewer for the selected debug client</li> |
13 <li>call trace viewer</li> |
15 <li>call trace viewer</li> |
14 <li>viewer for breakpoints</li> |
16 <li>viewer for breakpoints</li> |
15 <li>viewer for watch expressions</li> |
17 <li>viewer for watch expressions</li> |
16 <li>viewer for exceptions</li> |
18 <li>viewer for exceptions</li> |
17 <li>viewer for threads</li> |
19 <li>viewer for threads for the selected debug client</li> |
18 <li>a file browser (optional)</li> |
|
19 <li>an interpreter shell (optional)</li> |
|
20 </ul> |
20 </ul> |
21 """ |
21 """ |
22 |
22 |
23 |
23 |
24 import os |
24 import os |
430 @param line linenumber |
430 @param line linenumber |
431 @type int |
431 @type int |
432 @param debuggerId ID of the debugger backend |
432 @param debuggerId ID of the debugger backend |
433 @type str |
433 @type str |
434 """ |
434 """ |
435 if debuggerId: |
435 self.__setDebuggerIcon(debuggerId, "exceptions") |
436 index = self.__debuggersCombo.findText(debuggerId, Qt.MatchExactly) |
436 |
437 if index >= 0: |
|
438 self.__debuggersCombo.setItemIcon( |
|
439 index, UI.PixmapCache.getIcon("exceptions")) |
|
440 |
|
441 # TODO: Refactor the icon setting code into a method |
|
442 def __clientSyntaxError(self, message, filename, lineNo, characterNo, |
437 def __clientSyntaxError(self, message, filename, lineNo, characterNo, |
443 debuggerId): |
438 debuggerId): |
444 """ |
439 """ |
445 Private method to handle a syntax error in the debugged program. |
440 Private method to handle a syntax error in the debugged program. |
446 |
441 |
453 @param characterNo character number of the syntax error position |
448 @param characterNo character number of the syntax error position |
454 @type int |
449 @type int |
455 @param debuggerId ID of the debugger backend |
450 @param debuggerId ID of the debugger backend |
456 @type str |
451 @type str |
457 """ |
452 """ |
458 if debuggerId: |
453 self.__setDebuggerIcon(debuggerId, "syntaxError22") |
459 index = self.__debuggersCombo.findText(debuggerId, Qt.MatchExactly) |
|
460 if index >= 0: |
|
461 self.__debuggersCombo.setItemIcon( |
|
462 index, UI.PixmapCache.getIcon("syntaxError22")) |
|
463 |
454 |
464 def __clientException(self, exceptionType, exceptionMessage, stackTrace, |
455 def __clientException(self, exceptionType, exceptionMessage, stackTrace, |
465 debuggerId): |
456 debuggerId): |
466 """ |
457 """ |
467 Private method to handle an exception of the debugged program. |
458 Private method to handle an exception of the debugged program. |
473 @param stackTrace list of stack entries |
464 @param stackTrace list of stack entries |
474 @type list of str |
465 @type list of str |
475 @param debuggerId ID of the debugger backend |
466 @param debuggerId ID of the debugger backend |
476 @type str |
467 @type str |
477 """ |
468 """ |
478 if debuggerId: |
469 self.__setDebuggerIcon(debuggerId, "exceptions") |
479 index = self.__debuggersCombo.findText(debuggerId, Qt.MatchExactly) |
|
480 if index >= 0: |
|
481 self.__debuggersCombo.setItemIcon( |
|
482 index, UI.PixmapCache.getIcon("exceptions")) |
|
483 |
470 |
484 def setVariablesFilter(self, globalsFilter, localsFilter): |
471 def setVariablesFilter(self, globalsFilter, localsFilter): |
485 """ |
472 """ |
486 Public slot to set the local variables filter. |
473 Public slot to set the local variables filter. |
487 |
474 |
521 """ |
508 """ |
522 Public slot to set the global variable filter. |
509 Public slot to set the global variable filter. |
523 """ |
510 """ |
524 if self.debugServer.isDebugging(): |
511 if self.debugServer.isDebugging(): |
525 filterStr = self.globalsFilterEdit.text() |
512 filterStr = self.globalsFilterEdit.text() |
526 self.debugServer.remoteClientSetFilter(1, filterStr) |
513 self.debugServer.remoteClientSetFilter( |
|
514 self.getSelectedDebuggerId(), 1, filterStr) |
527 self.debugServer.remoteClientVariables( |
515 self.debugServer.remoteClientVariables( |
528 self.getSelectedDebuggerId(), 2, self.globalsFilter) |
516 self.getSelectedDebuggerId(), 2, self.globalsFilter) |
529 |
517 |
530 def setLocalsFilter(self): |
518 def setLocalsFilter(self): |
531 """ |
519 """ |
532 Public slot to set the local variable filter. |
520 Public slot to set the local variable filter. |
533 """ |
521 """ |
534 if self.debugServer.isDebugging(): |
522 if self.debugServer.isDebugging(): |
535 filterStr = self.localsFilterEdit.text() |
523 filterStr = self.localsFilterEdit.text() |
536 self.debugServer.remoteClientSetFilter(0, filterStr) |
524 self.debugServer.remoteClientSetFilter( |
|
525 self.getSelectedDebuggerId(), 0, filterStr) |
537 if self.currentStack: |
526 if self.currentStack: |
538 self.debugServer.remoteClientVariables( |
527 self.debugServer.remoteClientVariables( |
539 self.getSelectedDebuggerId(), 0, self.localsFilter, |
528 self.getSelectedDebuggerId(), 0, self.localsFilter, |
540 self.framenr) |
529 self.framenr) |
541 |
530 |
622 icon = "mediaPlaybackStart" |
611 icon = "mediaPlaybackStart" |
623 elif debugStatus == 0: |
612 elif debugStatus == 0: |
624 icon = "mediaPlaybackPause" |
613 icon = "mediaPlaybackPause" |
625 else: |
614 else: |
626 icon = "exceptions" |
615 icon = "exceptions" |
627 self.__debuggersCombo.setItemIcon(self.__debuggersCombo.currentIndex(), |
616 self.__setDebuggerIcon("", icon) |
628 UI.PixmapCache.getIcon(icon)) |
|
629 |
617 |
630 def __threadSelected(self, current, previous): |
618 def __threadSelected(self, current, previous): |
631 """ |
619 """ |
632 Private slot to handle the selection of a thread in the thread list. |
620 Private slot to handle the selection of a thread in the thread list. |
633 |
621 |
691 |
679 |
692 @return selected debugger ID |
680 @return selected debugger ID |
693 @rtype str |
681 @rtype str |
694 """ |
682 """ |
695 return self.__debuggersCombo.currentText() |
683 return self.__debuggersCombo.currentText() |
|
684 |
|
685 def __setDebuggerIcon(self, debuggerId, iconName): |
|
686 """ |
|
687 Private method to set the icon for a specific debugger ID. |
|
688 |
|
689 @param debuggerId ID of the debugger backend (empty ID means the |
|
690 currently selected one) |
|
691 @type str |
|
692 @param iconName name of the icon to be used |
|
693 @type str |
|
694 """ |
|
695 if debuggerId: |
|
696 index = self.__debuggersCombo.findText(debuggerId, Qt.MatchExactly) |
|
697 else: |
|
698 index = self.__debuggersCombo.currentIndex() |
|
699 if index >= 0: |
|
700 self.__debuggersCombo.setItemIcon( |
|
701 index, UI.PixmapCache.getIcon(iconName)) |