DebugViewer: united the debuggers and threads lists.

Tue, 29 Dec 2020 20:06:50 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Tue, 29 Dec 2020 20:06:50 +0100
changeset 7920
322d1ee01510
parent 7917
e04b7a25e241
child 7921
0d429bd82699

DebugViewer: united the debuggers and threads lists.

eric6/APIs/Python3/eric6.api file | annotate | diff | comparison | revisions
eric6/Debugger/DebugViewer.py file | annotate | diff | comparison | revisions
eric6/Documentation/Help/source.qch file | annotate | diff | comparison | revisions
eric6/Documentation/Help/source.qhp file | annotate | diff | comparison | revisions
eric6/Documentation/Source/eric6.Debugger.DebugViewer.html file | annotate | diff | comparison | revisions
eric6/i18n/eric6_cs.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_de.qm file | annotate | diff | comparison | revisions
eric6/i18n/eric6_de.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_empty.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_en.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_es.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_fr.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_it.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_pt.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_ru.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_tr.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_zh_CN.ts file | annotate | diff | comparison | revisions
--- a/eric6/APIs/Python3/eric6.api	Mon Dec 28 19:43:35 2020 +0100
+++ b/eric6/APIs/Python3/eric6.api	Tue Dec 29 20:06:50 2020 +0100
@@ -682,6 +682,7 @@
 eric6.Debugger.DebugUI.DebugUI.shutdownServer?4()
 eric6.Debugger.DebugUI.DebugUI.variablesFilter?4(scope)
 eric6.Debugger.DebugUI.DebugUI?1(ui, vm, debugServer, debugViewer, project)
+eric6.Debugger.DebugViewer.DebugViewer.DebuggerStateRole?7
 eric6.Debugger.DebugViewer.DebugViewer.ThreadIdRole?7
 eric6.Debugger.DebugViewer.DebugViewer.clearCallTrace?4()
 eric6.Debugger.DebugViewer.DebugViewer.currentWidget?4()
@@ -701,7 +702,6 @@
 eric6.Debugger.DebugViewer.DebugViewer.setGlobalsFilter?4()
 eric6.Debugger.DebugViewer.DebugViewer.setLocalsFilter?4()
 eric6.Debugger.DebugViewer.DebugViewer.setVariablesFilter?4(globalsFilter, localsFilter)
-eric6.Debugger.DebugViewer.DebugViewer.showThreadList?4(currentID, threadList, debuggerId)
 eric6.Debugger.DebugViewer.DebugViewer.showVariable?4(vlist, showGlobals)
 eric6.Debugger.DebugViewer.DebugViewer.showVariables?4(vlist, showGlobals)
 eric6.Debugger.DebugViewer.DebugViewer.showVariablesTab?4(showGlobals)
--- a/eric6/Debugger/DebugViewer.py	Mon Dec 28 19:43:35 2020 +0100
+++ b/eric6/Debugger/DebugViewer.py	Tue Dec 29 20:06:50 2020 +0100
@@ -50,6 +50,7 @@
     preferencesChanged = pyqtSignal()
     
     ThreadIdRole = Qt.UserRole + 1
+    DebuggerStateRole = Qt.UserRole + 2
     
     def __init__(self, debugServer, parent=None):
         """
@@ -78,13 +79,14 @@
         self.__debuggersWidget = QWidget()
         self.__debuggersLayout = QVBoxLayout(self.__debuggersWidget)
         self.__debuggersLayout.setContentsMargins(0, 0, 0, 0)
-        self.__debuggersLayout.addWidget(QLabel(self.tr("Debuggers:")))
+        self.__debuggersLayout.addWidget(
+            QLabel(self.tr("Debuggers and Threads:")))
         self.__debuggersList = QTreeWidget()
         self.__debuggersList.setHeaderLabels(
             [self.tr("ID"), self.tr("State"), ""])
         self.__debuggersList.header().setStretchLastSection(True)
         self.__debuggersList.setSortingEnabled(True)
-        self.__debuggersList.setRootIsDecorated(False)
+        self.__debuggersList.setRootIsDecorated(True)
         self.__debuggersList.setAlternatingRowColors(True)
         self.__debuggersLayout.addWidget(self.__debuggersList)
         self.__mainSplitter.addWidget(self.__debuggersWidget)
@@ -271,25 +273,9 @@
         
         self.__tabWidget.setCurrentWidget(self.glvWidget)
         
-        # add the threads viewer
-        self.__threadWidget = QWidget()
-        self.__threadWidgetLayout = QVBoxLayout(self.__threadWidget)
-        self.__threadWidgetLayout.setContentsMargins(0, 0, 0, 0)
-        self.__threadWidgetLayout.addWidget(QLabel(self.tr("Threads:")))
-        self.__threadList = QTreeWidget()
-        self.__threadList.setHeaderLabels(
-            [self.tr("Name"), self.tr("State"), ""])
-        self.__threadList.setSortingEnabled(True)
-        self.__threadList.setRootIsDecorated(False)
-        self.__threadList.setAlternatingRowColors(True)
-        self.__threadWidgetLayout.addWidget(self.__threadList)
-        self.__mainSplitter.addWidget(self.__threadWidget)
+        self.__doDebuggersListUpdate = True
         
-        self.__doThreadListUpdate = True
-        
-        self.__threadList.currentItemChanged.connect(self.__threadSelected)
-        
-        self.__mainSplitter.setSizes([50, 700, 50])
+        self.__mainSplitter.setSizes([100, 700])
         
         self.currentStack = None
         self.framenr = 0
@@ -297,11 +283,11 @@
         self.__autoViewSource = Preferences.getDebugger("AutoViewSourceCode")
         self.sourceButton.setVisible(not self.__autoViewSource)
         
-        # connect somer debug server signals
+        # connect some debug server signals
         self.debugServer.clientStack.connect(
             self.handleClientStack)
         self.debugServer.clientThreadList.connect(
-            self.showThreadList)
+            self.__addThreadList)
         self.debugServer.clientDebuggerId.connect(
             self.__clientDebuggerId)
         self.debugServer.passiveDebugStarted.connect(
@@ -358,7 +344,6 @@
         self.sourceButton.setEnabled(False)
         self.currentStack = None
         self.stackComboBox.clear()
-        self.__threadList.clear()
         self.__tabWidget.setCurrentWidget(self.glvWidget)
         self.breakpointViewer.handleResetUI()
         self.__debuggersList.clear()
@@ -504,7 +489,6 @@
                 self.sourceButton.setEnabled(False)
                 self.currentStack = None
                 self.stackComboBox.clear()
-                self.__threadList.clear()
             
             self.__removeDebugger(debuggerId)
     
@@ -635,83 +619,6 @@
         @type QWidget
         """
         self.__tabWidget.setCurrentWidget(widget)
-        
-    def showThreadList(self, currentID, threadList, debuggerId):
-        """
-        Public method to show the thread list.
-        
-        @param currentID id of the current thread
-        @type int
-        @param threadList list of dictionaries containing the thread data
-        @type list of dict
-        @param debuggerId ID of the debugger backend
-        @type str
-        """
-        debugStatus = -1    # i.e. running
-        
-        if debuggerId == self.getSelectedDebuggerId():
-            citm = None
-            
-            self.__threadList.clear()
-            for thread in threadList:
-                if thread.get('except', False):
-                    state = self.tr("waiting at exception")
-                    icon = "exceptions"
-                    debugStatus = 1
-                elif thread['broken']:
-                    state = self.tr("waiting at breakpoint")
-                    icon = "break"
-                    if debugStatus < 1:
-                        debugStatus = 0
-                else:
-                    state = self.tr("running")
-                    icon = "mediaPlaybackStart"
-                itm = QTreeWidgetItem(self.__threadList,
-                                      [thread['name'], state])
-                itm.setData(0, self.ThreadIdRole, thread['id'])
-                itm.setIcon(0, UI.PixmapCache.getIcon(icon))
-                if thread['id'] == currentID:
-                    citm = itm
-            
-            self.__threadList.header().resizeSections(
-                QHeaderView.ResizeToContents)
-            self.__threadList.header().setStretchLastSection(True)
-            
-            if citm:
-                self.__doThreadListUpdate = False
-                self.__threadList.setCurrentItem(citm)
-                self.__doThreadListUpdate = True
-        else:
-            for thread in threadList:
-                if thread.get('except', False):
-                    debugStatus = 1
-                elif thread['broken']:
-                    if debugStatus < 1:
-                        debugStatus = 0
-        
-        if debugStatus == -1:
-            icon = "mediaPlaybackStart"
-            state = "running"
-        elif debugStatus == 0:
-            icon = "break"
-            state = "broken"
-        else:
-            icon = "exceptions"
-            state = "exception"
-        self.__setDebuggerIconAndState(debuggerId, icon, state)
-    
-    def __threadSelected(self, current, previous):
-        """
-        Private slot to handle the selection of a thread in the thread list.
-        
-        @param current reference to the new current item
-        @type QTreeWidgetItem
-        @param previous reference to the previous current item
-        @type QTreeWidgetItem
-        """
-        if current is not None and self.__doThreadListUpdate:
-            tid = current.data(0, self.ThreadIdRole)
-            self.debugServer.remoteSetThread(self.getSelectedDebuggerId(), tid)
     
     def __callStackFrameSelected(self, frameNo):
         """
@@ -734,22 +641,25 @@
         @param previous reference to the previous current item
         @type QTreeWidgetItem
         """
-        if current is not None:
-            debuggerId = current.text(0)
-        else:
-            debuggerId = ""
-        if debuggerId:
-            self.globalsViewer.handleResetUI()
-            self.localsViewer.handleResetUI()
-            self.currentStack = None
-            self.stackComboBox.clear()
-            self.__threadList.clear()
-            self.callStackViewer.clear()
-            
-            self.debugUI.getDebuggerData(debuggerId)
-            self.debugUI.setDebugActionsEnabled(
-                self.getSelectedDebuggerState() != "running")
-            self.__showSource()
+        if current is not None and self.__doDebuggersListUpdate:
+            if current.parent() is None:
+                # it is a debugger item
+                debuggerId = current.text(0)
+                self.globalsViewer.handleResetUI()
+                self.localsViewer.handleResetUI()
+                self.currentStack = None
+                self.stackComboBox.clear()
+                self.callStackViewer.clear()
+                
+                self.debugUI.getDebuggerData(debuggerId)
+                self.debugUI.setDebugActionsEnabled(
+                    self.getSelectedDebuggerState() != "running")
+                self.__showSource()
+            else:
+                # it is a thread item
+                tid = current.data(0, self.ThreadIdRole)
+                self.debugServer.remoteSetThread(
+                    self.getSelectedDebuggerId(), tid)
     
     def __clientDebuggerId(self, debuggerId):
         """
@@ -779,10 +689,24 @@
         @param debuggerId ID of the debugger to set as current debugger
         @type str
         """
-        foundItems = self.__debuggersList.findItems(debuggerId,
-                                                    Qt.MatchExactly)
-        if foundItems:
-            self.__debuggersList.setCurrentItem(foundItems[0])
+        debuggerItems = self.__debuggersList.findItems(
+            debuggerId, Qt.MatchExactly)
+        if debuggerItems:
+            debuggerItem = debuggerItems[0]
+            currentItem = self.__debuggersList.currentItem()
+            if currentItem is debuggerItem:
+                # nothing to do
+                return
+            
+            currentParent = currentItem.parent()
+            if currentParent is None:
+                # current is a debugger item
+                self.__debuggersList.setCurrentItem(debuggerItem)
+            elif currentParent is debuggerItem:
+                # nothing to do
+                return
+            else:
+                self.__debuggersList.setCurrentItem(debuggerItem)
     
     def isOnlyDebugger(self):
         """
@@ -802,7 +726,12 @@
         """
         itm = self.__debuggersList.currentItem()
         if itm:
-            return itm.text(0)
+            if itm.parent() is None:
+                # it is a debugger item
+                return itm.text(0)
+            else:
+                # it is a thread item
+                return itm.parent().text(0)
         else:
             return ""
     
@@ -815,7 +744,12 @@
         """
         itm = self.__debuggersList.currentItem()
         if itm:
-            return itm.data(0, Qt.UserRole)
+            if itm.parent() is None:
+                # it is a debugger item
+                return itm.data(0, self.DebuggerStateRole)
+            else:
+                # it is a thread item
+                return itm.parent().data(0, self.DebuggerStateRole)
         else:
             return ""
     
@@ -841,7 +775,7 @@
             debuggerItem = self.__debuggersList.currentItem()
         if debuggerItem is not None:
             debuggerItem.setIcon(0, UI.PixmapCache.getIcon(iconName))
-            debuggerItem.setData(0, Qt.UserRole, state)
+            debuggerItem.setData(0, self.DebuggerStateRole, state)
             if state == "broken":
                 debuggerItem.setText(1, self.tr("waiting at breakpoint"))
             elif state == "exception":
@@ -869,3 +803,69 @@
             itm = self.__debuggersList.takeTopLevelItem(index)
             # __IGNORE_WARNING__
             del itm
+    
+    def __addThreadList(self, currentID, threadList, debuggerId):
+        """
+        Private method to add the list of threads to a debugger entry.
+        
+        @param currentID id of the current thread
+        @type int
+        @param threadList list of dictionaries containing the thread data
+        @type list of dict
+        @param debuggerId ID of the debugger backend
+        @type str
+        """
+        debugStatus = -1    # i.e. running
+        
+        debuggerItems = self.__debuggersList.findItems(
+            debuggerId, Qt.MatchExactly)
+        if debuggerItems:
+            debuggerItem = debuggerItems[0]
+            
+            currentItem = self.__debuggersList.currentItem()
+            if currentItem.parent() is debuggerItem:
+                currentChild = currentItem.text(0)
+            else:
+                currentChild = ""
+            self.__doDebuggersListUpdate = False
+            debuggerItem.takeChildren()
+            for thread in threadList:
+                if thread.get('except', False):
+                    state = self.tr("waiting at exception")
+                    icon = "exceptions"
+                    debugStatus = 1
+                elif thread['broken']:
+                    state = self.tr("waiting at breakpoint")
+                    icon = "break"
+                    if debugStatus < 1:
+                        debugStatus = 0
+                else:
+                    state = self.tr("running")
+                    icon = "mediaPlaybackStart"
+                itm = QTreeWidgetItem(debuggerItem, [thread['name'], state])
+                itm.setData(0, self.ThreadIdRole, thread['id'])
+                itm.setIcon(0, UI.PixmapCache.getIcon(icon))
+                if currentChild == thread['name']:
+                    self.__debuggersList.setCurrentItem(itm)
+                if thread['id'] == currentID:
+                    font = debuggerItem.font(0)
+                    font.setItalic(True)
+                    itm.setFont(0, font)
+            
+            debuggerItem.setExpanded(debuggerItem.childCount() > 0)
+            
+            self.__debuggersList.header().resizeSections(
+                QHeaderView.ResizeToContents)
+            self.__debuggersList.header().setStretchLastSection(True)
+            self.__doDebuggersListUpdate = True
+            
+            if debugStatus == -1:
+                icon = "mediaPlaybackStart"
+                state = "running"
+            elif debugStatus == 0:
+                icon = "break"
+                state = "broken"
+            else:
+                icon = "exceptions"
+                state = "exception"
+            self.__setDebuggerIconAndState(debuggerId, icon, state)
Binary file eric6/Documentation/Help/source.qch has changed
--- a/eric6/Documentation/Help/source.qhp	Mon Dec 28 19:43:35 2020 +0100
+++ b/eric6/Documentation/Help/source.qhp	Tue Dec 29 20:06:50 2020 +0100
@@ -3433,6 +3433,7 @@
       <keyword name="DebugViewer" id="DebugViewer" ref="eric6.Debugger.DebugViewer.html#DebugViewer" />
       <keyword name="DebugViewer (Constructor)" id="DebugViewer (Constructor)" ref="eric6.Debugger.DebugViewer.html#DebugViewer.__init__" />
       <keyword name="DebugViewer (Module)" id="DebugViewer (Module)" ref="eric6.Debugger.DebugViewer.html" />
+      <keyword name="DebugViewer.__addThreadList" id="DebugViewer.__addThreadList" ref="eric6.Debugger.DebugViewer.html#DebugViewer.__addThreadList" />
       <keyword name="DebugViewer.__callStackFrameSelected" id="DebugViewer.__callStackFrameSelected" ref="eric6.Debugger.DebugViewer.html#DebugViewer.__callStackFrameSelected" />
       <keyword name="DebugViewer.__clientDebuggerId" id="DebugViewer.__clientDebuggerId" ref="eric6.Debugger.DebugViewer.html#DebugViewer.__clientDebuggerId" />
       <keyword name="DebugViewer.__clientException" id="DebugViewer.__clientException" ref="eric6.Debugger.DebugViewer.html#DebugViewer.__clientException" />
@@ -3445,7 +3446,6 @@
       <keyword name="DebugViewer.__setCurrentDebugger" id="DebugViewer.__setCurrentDebugger" ref="eric6.Debugger.DebugViewer.html#DebugViewer.__setCurrentDebugger" />
       <keyword name="DebugViewer.__setDebuggerIconAndState" id="DebugViewer.__setDebuggerIconAndState" ref="eric6.Debugger.DebugViewer.html#DebugViewer.__setDebuggerIconAndState" />
       <keyword name="DebugViewer.__showSource" id="DebugViewer.__showSource" ref="eric6.Debugger.DebugViewer.html#DebugViewer.__showSource" />
-      <keyword name="DebugViewer.__threadSelected" id="DebugViewer.__threadSelected" ref="eric6.Debugger.DebugViewer.html#DebugViewer.__threadSelected" />
       <keyword name="DebugViewer.clearCallTrace" id="DebugViewer.clearCallTrace" ref="eric6.Debugger.DebugViewer.html#DebugViewer.clearCallTrace" />
       <keyword name="DebugViewer.currentWidget" id="DebugViewer.currentWidget" ref="eric6.Debugger.DebugViewer.html#DebugViewer.currentWidget" />
       <keyword name="DebugViewer.getSelectedDebuggerId" id="DebugViewer.getSelectedDebuggerId" ref="eric6.Debugger.DebugViewer.html#DebugViewer.getSelectedDebuggerId" />
@@ -3463,7 +3463,6 @@
       <keyword name="DebugViewer.setGlobalsFilter" id="DebugViewer.setGlobalsFilter" ref="eric6.Debugger.DebugViewer.html#DebugViewer.setGlobalsFilter" />
       <keyword name="DebugViewer.setLocalsFilter" id="DebugViewer.setLocalsFilter" ref="eric6.Debugger.DebugViewer.html#DebugViewer.setLocalsFilter" />
       <keyword name="DebugViewer.setVariablesFilter" id="DebugViewer.setVariablesFilter" ref="eric6.Debugger.DebugViewer.html#DebugViewer.setVariablesFilter" />
-      <keyword name="DebugViewer.showThreadList" id="DebugViewer.showThreadList" ref="eric6.Debugger.DebugViewer.html#DebugViewer.showThreadList" />
       <keyword name="DebugViewer.showVariable" id="DebugViewer.showVariable" ref="eric6.Debugger.DebugViewer.html#DebugViewer.showVariable" />
       <keyword name="DebugViewer.showVariables" id="DebugViewer.showVariables" ref="eric6.Debugger.DebugViewer.html#DebugViewer.showVariables" />
       <keyword name="DebugViewer.showVariablesTab" id="DebugViewer.showVariablesTab" ref="eric6.Debugger.DebugViewer.html#DebugViewer.showVariablesTab" />
--- a/eric6/Documentation/Source/eric6.Debugger.DebugViewer.html	Mon Dec 28 19:43:35 2020 +0100
+++ b/eric6/Documentation/Source/eric6.Debugger.DebugViewer.html	Tue Dec 29 20:06:50 2020 +0100
@@ -89,7 +89,7 @@
 <h3>Class Attributes</h3>
 
 <table>
-<tr><td>ThreadIdRole</td></tr>
+<tr><td>DebuggerStateRole</td></tr><tr><td>ThreadIdRole</td></tr>
 </table>
 <h3>Class Methods</h3>
 
@@ -105,6 +105,10 @@
 <td>Constructor</td>
 </tr>
 <tr>
+<td><a href="#DebugViewer.__addThreadList">__addThreadList</a></td>
+<td>Private method to add the list of threads to a debugger entry.</td>
+</tr>
+<tr>
 <td><a href="#DebugViewer.__callStackFrameSelected">__callStackFrameSelected</a></td>
 <td>Private slot to handle the selection of a call stack entry of the call stack viewer.</td>
 </tr>
@@ -153,10 +157,6 @@
 <td>Private slot to handle the source button press to show the selected file.</td>
 </tr>
 <tr>
-<td><a href="#DebugViewer.__threadSelected">__threadSelected</a></td>
-<td>Private slot to handle the selection of a thread in the thread list.</td>
-</tr>
-<tr>
 <td><a href="#DebugViewer.clearCallTrace">clearCallTrace</a></td>
 <td>Public method to clear the recorded call trace.</td>
 </tr>
@@ -225,10 +225,6 @@
 <td>Public slot to set the local variables filter.</td>
 </tr>
 <tr>
-<td><a href="#DebugViewer.showThreadList">showThreadList</a></td>
-<td>Public method to show the thread list.</td>
-</tr>
-<tr>
 <td><a href="#DebugViewer.showVariable">showVariable</a></td>
 <td>Public method to show the variables in the respective window.</td>
 </tr>
@@ -265,6 +261,28 @@
 parent widget
 </dd>
 </dl>
+<a NAME="DebugViewer.__addThreadList" ID="DebugViewer.__addThreadList"></a>
+<h4>DebugViewer.__addThreadList</h4>
+<b>__addThreadList</b>(<i>currentID, threadList, debuggerId</i>)
+
+<p>
+        Private method to add the list of threads to a debugger entry.
+</p>
+<dl>
+
+<dt><i>currentID</i> (int)</dt>
+<dd>
+id of the current thread
+</dd>
+<dt><i>threadList</i> (list of dict)</dt>
+<dd>
+list of dictionaries containing the thread data
+</dd>
+<dt><i>debuggerId</i> (str)</dt>
+<dd>
+ID of the debugger backend
+</dd>
+</dl>
 <a NAME="DebugViewer.__callStackFrameSelected" ID="DebugViewer.__callStackFrameSelected"></a>
 <h4>DebugViewer.__callStackFrameSelected</h4>
 <b>__callStackFrameSelected</b>(<i>frameNo</i>)
@@ -494,24 +512,6 @@
         Private slot to handle the source button press to show the selected
         file.
 </p>
-<a NAME="DebugViewer.__threadSelected" ID="DebugViewer.__threadSelected"></a>
-<h4>DebugViewer.__threadSelected</h4>
-<b>__threadSelected</b>(<i>current, previous</i>)
-
-<p>
-        Private slot to handle the selection of a thread in the thread list.
-</p>
-<dl>
-
-<dt><i>current</i> (QTreeWidgetItem)</dt>
-<dd>
-reference to the new current item
-</dd>
-<dt><i>previous</i> (QTreeWidgetItem)</dt>
-<dd>
-reference to the previous current item
-</dd>
-</dl>
 <a NAME="DebugViewer.clearCallTrace" ID="DebugViewer.clearCallTrace"></a>
 <h4>DebugViewer.clearCallTrace</h4>
 <b>clearCallTrace</b>(<i></i>)
@@ -749,28 +749,6 @@
 filter list for local variable types
 </dd>
 </dl>
-<a NAME="DebugViewer.showThreadList" ID="DebugViewer.showThreadList"></a>
-<h4>DebugViewer.showThreadList</h4>
-<b>showThreadList</b>(<i>currentID, threadList, debuggerId</i>)
-
-<p>
-        Public method to show the thread list.
-</p>
-<dl>
-
-<dt><i>currentID</i> (int)</dt>
-<dd>
-id of the current thread
-</dd>
-<dt><i>threadList</i> (list of dict)</dt>
-<dd>
-list of dictionaries containing the thread data
-</dd>
-<dt><i>debuggerId</i> (str)</dt>
-<dd>
-ID of the debugger backend
-</dd>
-</dl>
 <a NAME="DebugViewer.showVariable" ID="DebugViewer.showVariable"></a>
 <h4>DebugViewer.showVariable</h4>
 <b>showVariable</b>(<i>vlist, showGlobals</i>)
--- a/eric6/i18n/eric6_cs.ts	Mon Dec 28 19:43:35 2020 +0100
+++ b/eric6/i18n/eric6_cs.ts	Tue Dec 29 20:06:50 2020 +0100
@@ -7465,115 +7465,115 @@
 <context>
     <name>DebugViewer</name>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="172"/>
+        <location filename="../Debugger/DebugViewer.py" line="174"/>
         <source>Enter regular expression patterns separated by &apos;;&apos; to define variable filters. </source>
         <translation>Zadání vzorků regulárních výrazů oddělených &apos;;&apos; pro definování proměnných filtrů.</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="176"/>
+        <location filename="../Debugger/DebugViewer.py" line="178"/>
         <source>Enter regular expression patterns separated by &apos;;&apos; to define variable filters. All variables and class attributes matched by one of the expressions are not shown in the list above.</source>
         <translation>Zadání vzorků regulárních výrazů oddělených &apos;;&apos; pro definování proměnných filtrů. Proměnné a atributy tříd nalezené jedním z uvedených výrazů, nejsou zobrazovány v seznamu nahoře.</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="182"/>
+        <location filename="../Debugger/DebugViewer.py" line="184"/>
         <source>Set</source>
         <translation>Množina</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="157"/>
+        <location filename="../Debugger/DebugViewer.py" line="159"/>
         <source>Source</source>
         <translation>Zdroj</translation>
     </message>
     <message>
         <location filename="../Debugger/DebugViewer.py" line="278"/>
         <source>Threads:</source>
-        <translation>Thready:</translation>
-    </message>
-    <message>
-        <location filename="../Debugger/DebugViewer.py" line="83"/>
+        <translation type="obsolete">Thready:</translation>
+    </message>
+    <message>
+        <location filename="../Debugger/DebugViewer.py" line="85"/>
         <source>ID</source>
         <translation></translation>
     </message>
     <message>
         <location filename="../Debugger/DebugViewer.py" line="280"/>
         <source>Name</source>
-        <translation>Jméno</translation>
-    </message>
-    <message>
-        <location filename="../Debugger/DebugViewer.py" line="280"/>
+        <translation type="obsolete">Jméno</translation>
+    </message>
+    <message>
+        <location filename="../Debugger/DebugViewer.py" line="85"/>
         <source>State</source>
         <translation>Stav</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="846"/>
+        <location filename="../Debugger/DebugViewer.py" line="838"/>
         <source>waiting at breakpoint</source>
         <translation>čekající na breakpoint</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="850"/>
+        <location filename="../Debugger/DebugViewer.py" line="843"/>
         <source>running</source>
         <translation>běžící</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="81"/>
-        <source>Debuggers:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Debugger/DebugViewer.py" line="848"/>
+        <location filename="../Debugger/DebugViewer.py" line="834"/>
         <source>waiting at exception</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="852"/>
+        <location filename="../Debugger/DebugViewer.py" line="786"/>
         <source>unknown state ({0})</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="763"/>
+        <location filename="../Debugger/DebugViewer.py" line="673"/>
         <source>&lt;p&gt;Debugger with ID &lt;b&gt;{0}&lt;/b&gt; has been connected.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="190"/>
+        <location filename="../Debugger/DebugViewer.py" line="192"/>
         <source>Shows the list of local variables and their values.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="210"/>
+        <location filename="../Debugger/DebugViewer.py" line="212"/>
         <source>Shows the current call stack.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="223"/>
+        <location filename="../Debugger/DebugViewer.py" line="225"/>
         <source>Shows a trace of the program flow.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="235"/>
+        <location filename="../Debugger/DebugViewer.py" line="237"/>
         <source>Shows a list of defined breakpoints.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="247"/>
+        <location filename="../Debugger/DebugViewer.py" line="249"/>
         <source>Shows a list of defined watchpoints.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="257"/>
+        <location filename="../Debugger/DebugViewer.py" line="259"/>
         <source>Shows a list of raised exceptions.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="268"/>
+        <location filename="../Debugger/DebugViewer.py" line="270"/>
         <source>Shows a code disassembly in case of an exception.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="134"/>
+        <location filename="../Debugger/DebugViewer.py" line="136"/>
         <source>Shows the list of global variables and their values.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../Debugger/DebugViewer.py" line="82"/>
+        <source>Debuggers and Threads:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>DebuggerGeneralPage</name>
Binary file eric6/i18n/eric6_de.qm has changed
--- a/eric6/i18n/eric6_de.ts	Mon Dec 28 19:43:35 2020 +0100
+++ b/eric6/i18n/eric6_de.ts	Tue Dec 29 20:06:50 2020 +0100
@@ -7327,115 +7327,105 @@
 <context>
     <name>DebugViewer</name>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="172"/>
+        <location filename="../Debugger/DebugViewer.py" line="174"/>
         <source>Enter regular expression patterns separated by &apos;;&apos; to define variable filters. </source>
         <translation>Gib reguläre Ausdrücke getrennt durch „;“ ein, um Variablenfilter zu definieren. </translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="176"/>
+        <location filename="../Debugger/DebugViewer.py" line="178"/>
         <source>Enter regular expression patterns separated by &apos;;&apos; to define variable filters. All variables and class attributes matched by one of the expressions are not shown in the list above.</source>
         <translation>Gib reguläre Ausdrücke getrennt durch „;“ ein, um Variablenfilter zu definieren. Alle Variablen und Klassenattribute, auf die einer der Ausdrücke passt, werden in der obigen Liste nicht dargestellt.</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="182"/>
+        <location filename="../Debugger/DebugViewer.py" line="184"/>
         <source>Set</source>
         <translation>Setzen</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="157"/>
+        <location filename="../Debugger/DebugViewer.py" line="159"/>
         <source>Source</source>
         <translation>Quelltext</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="278"/>
-        <source>Threads:</source>
-        <translation>Threads:</translation>
-    </message>
-    <message>
-        <location filename="../Debugger/DebugViewer.py" line="83"/>
+        <location filename="../Debugger/DebugViewer.py" line="85"/>
         <source>ID</source>
         <translation>ID</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="280"/>
-        <source>Name</source>
-        <translation>Name</translation>
-    </message>
-    <message>
-        <location filename="../Debugger/DebugViewer.py" line="280"/>
+        <location filename="../Debugger/DebugViewer.py" line="85"/>
         <source>State</source>
         <translation>Status</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="846"/>
+        <location filename="../Debugger/DebugViewer.py" line="838"/>
         <source>waiting at breakpoint</source>
         <translation>am Haltepunkt wartend</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="850"/>
+        <location filename="../Debugger/DebugViewer.py" line="843"/>
         <source>running</source>
         <translation>ausführend</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="81"/>
-        <source>Debuggers:</source>
-        <translation>Debugger:</translation>
-    </message>
-    <message>
-        <location filename="../Debugger/DebugViewer.py" line="848"/>
+        <location filename="../Debugger/DebugViewer.py" line="834"/>
         <source>waiting at exception</source>
         <translation>an Ausnahme wartend</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="852"/>
+        <location filename="../Debugger/DebugViewer.py" line="786"/>
         <source>unknown state ({0})</source>
         <translation>unbekannter Status ({0})</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="763"/>
+        <location filename="../Debugger/DebugViewer.py" line="673"/>
         <source>&lt;p&gt;Debugger with ID &lt;b&gt;{0}&lt;/b&gt; has been connected.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Debugger mit der ID &lt;b&gt;{0}&lt;/b&gt; wurde verbunden.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="190"/>
+        <location filename="../Debugger/DebugViewer.py" line="192"/>
         <source>Shows the list of local variables and their values.</source>
         <translation>Zeigt die Liste der lokalen Variablen mit ihren Werten.</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="210"/>
+        <location filename="../Debugger/DebugViewer.py" line="212"/>
         <source>Shows the current call stack.</source>
         <translation>Zeigt den aktuellen Aufrufstapel.</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="223"/>
+        <location filename="../Debugger/DebugViewer.py" line="225"/>
         <source>Shows a trace of the program flow.</source>
         <translation>Zeigt den Ablauf des Programms.</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="235"/>
+        <location filename="../Debugger/DebugViewer.py" line="237"/>
         <source>Shows a list of defined breakpoints.</source>
         <translation>Zeigt eine Liste der definierten Haltepunkte.</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="247"/>
+        <location filename="../Debugger/DebugViewer.py" line="249"/>
         <source>Shows a list of defined watchpoints.</source>
         <translation>Zeigt eine Liste der definierten Beobachtungspunkte.</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="257"/>
+        <location filename="../Debugger/DebugViewer.py" line="259"/>
         <source>Shows a list of raised exceptions.</source>
         <translation>Zeigt eine Liste der Ausnahmen.</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="268"/>
+        <location filename="../Debugger/DebugViewer.py" line="270"/>
         <source>Shows a code disassembly in case of an exception.</source>
         <translation>Zeigt ein Disassembly des Codes im Falle einer Ausnahme.</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="134"/>
+        <location filename="../Debugger/DebugViewer.py" line="136"/>
         <source>Shows the list of global variables and their values.</source>
         <translation>Zeigt die Liste der globalen Variablen mit ihren Werten.</translation>
     </message>
+    <message>
+        <location filename="../Debugger/DebugViewer.py" line="82"/>
+        <source>Debuggers and Threads:</source>
+        <translation>Debugger und Threads:</translation>
+    </message>
 </context>
 <context>
     <name>DebuggerGeneralPage</name>
--- a/eric6/i18n/eric6_empty.ts	Mon Dec 28 19:43:35 2020 +0100
+++ b/eric6/i18n/eric6_empty.ts	Tue Dec 29 20:06:50 2020 +0100
@@ -7259,115 +7259,105 @@
 <context>
     <name>DebugViewer</name>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="172"/>
+        <location filename="../Debugger/DebugViewer.py" line="174"/>
         <source>Enter regular expression patterns separated by &apos;;&apos; to define variable filters. </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="176"/>
+        <location filename="../Debugger/DebugViewer.py" line="178"/>
         <source>Enter regular expression patterns separated by &apos;;&apos; to define variable filters. All variables and class attributes matched by one of the expressions are not shown in the list above.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="182"/>
+        <location filename="../Debugger/DebugViewer.py" line="184"/>
         <source>Set</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="157"/>
+        <location filename="../Debugger/DebugViewer.py" line="159"/>
         <source>Source</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="278"/>
-        <source>Threads:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Debugger/DebugViewer.py" line="83"/>
+        <location filename="../Debugger/DebugViewer.py" line="85"/>
         <source>ID</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="280"/>
-        <source>Name</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Debugger/DebugViewer.py" line="280"/>
+        <location filename="../Debugger/DebugViewer.py" line="85"/>
         <source>State</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="846"/>
+        <location filename="../Debugger/DebugViewer.py" line="838"/>
         <source>waiting at breakpoint</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="850"/>
+        <location filename="../Debugger/DebugViewer.py" line="843"/>
         <source>running</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="81"/>
-        <source>Debuggers:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Debugger/DebugViewer.py" line="848"/>
+        <location filename="../Debugger/DebugViewer.py" line="834"/>
         <source>waiting at exception</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="852"/>
+        <location filename="../Debugger/DebugViewer.py" line="786"/>
         <source>unknown state ({0})</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="763"/>
+        <location filename="../Debugger/DebugViewer.py" line="673"/>
         <source>&lt;p&gt;Debugger with ID &lt;b&gt;{0}&lt;/b&gt; has been connected.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="190"/>
+        <location filename="../Debugger/DebugViewer.py" line="192"/>
         <source>Shows the list of local variables and their values.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="210"/>
+        <location filename="../Debugger/DebugViewer.py" line="212"/>
         <source>Shows the current call stack.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="223"/>
+        <location filename="../Debugger/DebugViewer.py" line="225"/>
         <source>Shows a trace of the program flow.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="235"/>
+        <location filename="../Debugger/DebugViewer.py" line="237"/>
         <source>Shows a list of defined breakpoints.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="247"/>
+        <location filename="../Debugger/DebugViewer.py" line="249"/>
         <source>Shows a list of defined watchpoints.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="257"/>
+        <location filename="../Debugger/DebugViewer.py" line="259"/>
         <source>Shows a list of raised exceptions.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="268"/>
+        <location filename="../Debugger/DebugViewer.py" line="270"/>
         <source>Shows a code disassembly in case of an exception.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="134"/>
+        <location filename="../Debugger/DebugViewer.py" line="136"/>
         <source>Shows the list of global variables and their values.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../Debugger/DebugViewer.py" line="82"/>
+        <source>Debuggers and Threads:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>DebuggerGeneralPage</name>
--- a/eric6/i18n/eric6_en.ts	Mon Dec 28 19:43:35 2020 +0100
+++ b/eric6/i18n/eric6_en.ts	Tue Dec 29 20:06:50 2020 +0100
@@ -7267,115 +7267,105 @@
 <context>
     <name>DebugViewer</name>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="172"/>
+        <location filename="../Debugger/DebugViewer.py" line="174"/>
         <source>Enter regular expression patterns separated by &apos;;&apos; to define variable filters. </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="176"/>
+        <location filename="../Debugger/DebugViewer.py" line="178"/>
         <source>Enter regular expression patterns separated by &apos;;&apos; to define variable filters. All variables and class attributes matched by one of the expressions are not shown in the list above.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="182"/>
+        <location filename="../Debugger/DebugViewer.py" line="184"/>
         <source>Set</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="157"/>
+        <location filename="../Debugger/DebugViewer.py" line="159"/>
         <source>Source</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="278"/>
-        <source>Threads:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Debugger/DebugViewer.py" line="83"/>
+        <location filename="../Debugger/DebugViewer.py" line="85"/>
         <source>ID</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="280"/>
-        <source>Name</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Debugger/DebugViewer.py" line="280"/>
+        <location filename="../Debugger/DebugViewer.py" line="85"/>
         <source>State</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="846"/>
+        <location filename="../Debugger/DebugViewer.py" line="838"/>
         <source>waiting at breakpoint</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="850"/>
+        <location filename="../Debugger/DebugViewer.py" line="843"/>
         <source>running</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="81"/>
-        <source>Debuggers:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Debugger/DebugViewer.py" line="848"/>
+        <location filename="../Debugger/DebugViewer.py" line="834"/>
         <source>waiting at exception</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="763"/>
+        <location filename="../Debugger/DebugViewer.py" line="673"/>
         <source>&lt;p&gt;Debugger with ID &lt;b&gt;{0}&lt;/b&gt; has been connected.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="852"/>
+        <location filename="../Debugger/DebugViewer.py" line="786"/>
         <source>unknown state ({0})</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="190"/>
+        <location filename="../Debugger/DebugViewer.py" line="192"/>
         <source>Shows the list of local variables and their values.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="210"/>
+        <location filename="../Debugger/DebugViewer.py" line="212"/>
         <source>Shows the current call stack.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="223"/>
+        <location filename="../Debugger/DebugViewer.py" line="225"/>
         <source>Shows a trace of the program flow.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="235"/>
+        <location filename="../Debugger/DebugViewer.py" line="237"/>
         <source>Shows a list of defined breakpoints.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="247"/>
+        <location filename="../Debugger/DebugViewer.py" line="249"/>
         <source>Shows a list of defined watchpoints.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="257"/>
+        <location filename="../Debugger/DebugViewer.py" line="259"/>
         <source>Shows a list of raised exceptions.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="268"/>
+        <location filename="../Debugger/DebugViewer.py" line="270"/>
         <source>Shows a code disassembly in case of an exception.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="134"/>
+        <location filename="../Debugger/DebugViewer.py" line="136"/>
         <source>Shows the list of global variables and their values.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../Debugger/DebugViewer.py" line="82"/>
+        <source>Debuggers and Threads:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>DebuggerGeneralPage</name>
--- a/eric6/i18n/eric6_es.ts	Mon Dec 28 19:43:35 2020 +0100
+++ b/eric6/i18n/eric6_es.ts	Tue Dec 29 20:06:50 2020 +0100
@@ -7322,115 +7322,115 @@
 <context>
     <name>DebugViewer</name>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="172"/>
+        <location filename="../Debugger/DebugViewer.py" line="174"/>
         <source>Enter regular expression patterns separated by &apos;;&apos; to define variable filters. </source>
         <translation>Para definir filtros de variables introduzca patrones de expresión regular separados por &apos;;&apos;. </translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="176"/>
+        <location filename="../Debugger/DebugViewer.py" line="178"/>
         <source>Enter regular expression patterns separated by &apos;;&apos; to define variable filters. All variables and class attributes matched by one of the expressions are not shown in the list above.</source>
         <translation>Para definir filtros de variables introduzca patrones de expresión regular separados por &apos;;&apos;. Todas las variables y atributos de clases que coincidan con una de las expresiones, no se muestran en el listado anterior.</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="182"/>
+        <location filename="../Debugger/DebugViewer.py" line="184"/>
         <source>Set</source>
         <translation>Establecer</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="157"/>
+        <location filename="../Debugger/DebugViewer.py" line="159"/>
         <source>Source</source>
         <translation>Código fuente</translation>
     </message>
     <message>
         <location filename="../Debugger/DebugViewer.py" line="278"/>
         <source>Threads:</source>
-        <translation>Hilos:</translation>
-    </message>
-    <message>
-        <location filename="../Debugger/DebugViewer.py" line="83"/>
+        <translation type="obsolete">Hilos:</translation>
+    </message>
+    <message>
+        <location filename="../Debugger/DebugViewer.py" line="85"/>
         <source>ID</source>
         <translation>ID</translation>
     </message>
     <message>
         <location filename="../Debugger/DebugViewer.py" line="280"/>
         <source>Name</source>
-        <translation>Nombre</translation>
-    </message>
-    <message>
-        <location filename="../Debugger/DebugViewer.py" line="280"/>
+        <translation type="obsolete">Nombre</translation>
+    </message>
+    <message>
+        <location filename="../Debugger/DebugViewer.py" line="85"/>
         <source>State</source>
         <translation>Estado</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="846"/>
+        <location filename="../Debugger/DebugViewer.py" line="838"/>
         <source>waiting at breakpoint</source>
         <translation>esperando en el punto de ruptura</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="850"/>
+        <location filename="../Debugger/DebugViewer.py" line="843"/>
         <source>running</source>
         <translation>en ejecución</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="81"/>
-        <source>Debuggers:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Debugger/DebugViewer.py" line="848"/>
+        <location filename="../Debugger/DebugViewer.py" line="834"/>
         <source>waiting at exception</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="852"/>
+        <location filename="../Debugger/DebugViewer.py" line="786"/>
         <source>unknown state ({0})</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="763"/>
+        <location filename="../Debugger/DebugViewer.py" line="673"/>
         <source>&lt;p&gt;Debugger with ID &lt;b&gt;{0}&lt;/b&gt; has been connected.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="190"/>
+        <location filename="../Debugger/DebugViewer.py" line="192"/>
         <source>Shows the list of local variables and their values.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="210"/>
+        <location filename="../Debugger/DebugViewer.py" line="212"/>
         <source>Shows the current call stack.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="223"/>
+        <location filename="../Debugger/DebugViewer.py" line="225"/>
         <source>Shows a trace of the program flow.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="235"/>
+        <location filename="../Debugger/DebugViewer.py" line="237"/>
         <source>Shows a list of defined breakpoints.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="247"/>
+        <location filename="../Debugger/DebugViewer.py" line="249"/>
         <source>Shows a list of defined watchpoints.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="257"/>
+        <location filename="../Debugger/DebugViewer.py" line="259"/>
         <source>Shows a list of raised exceptions.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="268"/>
+        <location filename="../Debugger/DebugViewer.py" line="270"/>
         <source>Shows a code disassembly in case of an exception.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="134"/>
+        <location filename="../Debugger/DebugViewer.py" line="136"/>
         <source>Shows the list of global variables and their values.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../Debugger/DebugViewer.py" line="82"/>
+        <source>Debuggers and Threads:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>DebuggerGeneralPage</name>
--- a/eric6/i18n/eric6_fr.ts	Mon Dec 28 19:43:35 2020 +0100
+++ b/eric6/i18n/eric6_fr.ts	Tue Dec 29 20:06:50 2020 +0100
@@ -7488,115 +7488,110 @@
 <context>
     <name>DebugViewer</name>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="172"/>
+        <location filename="../Debugger/DebugViewer.py" line="174"/>
         <source>Enter regular expression patterns separated by &apos;;&apos; to define variable filters. </source>
         <translation>Entrer des expressions régulières séparées par &apos;;&apos; pour définir les filtres de variables. </translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="176"/>
+        <location filename="../Debugger/DebugViewer.py" line="178"/>
         <source>Enter regular expression patterns separated by &apos;;&apos; to define variable filters. All variables and class attributes matched by one of the expressions are not shown in the list above.</source>
         <translation>Entrer des expressions régulières séparées par &apos;;&apos; pour définir les filtres de variables. Toutes les variables et attributs de classes répondant à l&apos;un des critères ne sont pas affichés dans la liste ci-dessous.</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="182"/>
+        <location filename="../Debugger/DebugViewer.py" line="184"/>
         <source>Set</source>
         <translation>Liste</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="157"/>
+        <location filename="../Debugger/DebugViewer.py" line="159"/>
         <source>Source</source>
         <translation>Source</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="278"/>
-        <source>Threads:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Debugger/DebugViewer.py" line="83"/>
+        <location filename="../Debugger/DebugViewer.py" line="85"/>
         <source>ID</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../Debugger/DebugViewer.py" line="280"/>
         <source>Name</source>
-        <translation>Nom</translation>
-    </message>
-    <message>
-        <location filename="../Debugger/DebugViewer.py" line="280"/>
+        <translation type="obsolete">Nom</translation>
+    </message>
+    <message>
+        <location filename="../Debugger/DebugViewer.py" line="85"/>
         <source>State</source>
         <translation>État</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="846"/>
+        <location filename="../Debugger/DebugViewer.py" line="838"/>
         <source>waiting at breakpoint</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="850"/>
+        <location filename="../Debugger/DebugViewer.py" line="843"/>
         <source>running</source>
         <translation>en cours</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="81"/>
-        <source>Debuggers:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Debugger/DebugViewer.py" line="848"/>
+        <location filename="../Debugger/DebugViewer.py" line="834"/>
         <source>waiting at exception</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="852"/>
+        <location filename="../Debugger/DebugViewer.py" line="786"/>
         <source>unknown state ({0})</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="763"/>
+        <location filename="../Debugger/DebugViewer.py" line="673"/>
         <source>&lt;p&gt;Debugger with ID &lt;b&gt;{0}&lt;/b&gt; has been connected.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="190"/>
+        <location filename="../Debugger/DebugViewer.py" line="192"/>
         <source>Shows the list of local variables and their values.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="210"/>
+        <location filename="../Debugger/DebugViewer.py" line="212"/>
         <source>Shows the current call stack.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="223"/>
+        <location filename="../Debugger/DebugViewer.py" line="225"/>
         <source>Shows a trace of the program flow.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="235"/>
+        <location filename="../Debugger/DebugViewer.py" line="237"/>
         <source>Shows a list of defined breakpoints.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="247"/>
+        <location filename="../Debugger/DebugViewer.py" line="249"/>
         <source>Shows a list of defined watchpoints.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="257"/>
+        <location filename="../Debugger/DebugViewer.py" line="259"/>
         <source>Shows a list of raised exceptions.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="268"/>
+        <location filename="../Debugger/DebugViewer.py" line="270"/>
         <source>Shows a code disassembly in case of an exception.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="134"/>
+        <location filename="../Debugger/DebugViewer.py" line="136"/>
         <source>Shows the list of global variables and their values.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../Debugger/DebugViewer.py" line="82"/>
+        <source>Debuggers and Threads:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>DebuggerGeneralPage</name>
--- a/eric6/i18n/eric6_it.ts	Mon Dec 28 19:43:35 2020 +0100
+++ b/eric6/i18n/eric6_it.ts	Tue Dec 29 20:06:50 2020 +0100
@@ -7600,115 +7600,115 @@
 <context>
     <name>DebugViewer</name>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="172"/>
+        <location filename="../Debugger/DebugViewer.py" line="174"/>
         <source>Enter regular expression patterns separated by &apos;;&apos; to define variable filters. </source>
         <translation>Inserisi pattern  delle espressioni regolari serate da &apos;;&apos; per definire dei filtri variabili.</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="176"/>
+        <location filename="../Debugger/DebugViewer.py" line="178"/>
         <source>Enter regular expression patterns separated by &apos;;&apos; to define variable filters. All variables and class attributes matched by one of the expressions are not shown in the list above.</source>
         <translation>Inserisi pattern  delle espressioni regolari serate da &apos;;&apos; per definire dei filtri variabili. Tutte le variabili e gli attributi di classe che sono verificati da una di queste espressioni non sono mostrate nella lista sottostante.</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="182"/>
+        <location filename="../Debugger/DebugViewer.py" line="184"/>
         <source>Set</source>
         <translation>Imposta</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="157"/>
+        <location filename="../Debugger/DebugViewer.py" line="159"/>
         <source>Source</source>
         <translation>Sorgente</translation>
     </message>
     <message>
         <location filename="../Debugger/DebugViewer.py" line="278"/>
         <source>Threads:</source>
-        <translation>Threads:</translation>
-    </message>
-    <message>
-        <location filename="../Debugger/DebugViewer.py" line="83"/>
+        <translation type="obsolete">Threads:</translation>
+    </message>
+    <message>
+        <location filename="../Debugger/DebugViewer.py" line="85"/>
         <source>ID</source>
         <translation>ID</translation>
     </message>
     <message>
         <location filename="../Debugger/DebugViewer.py" line="280"/>
         <source>Name</source>
-        <translation>Nome</translation>
-    </message>
-    <message>
-        <location filename="../Debugger/DebugViewer.py" line="280"/>
+        <translation type="obsolete">Nome</translation>
+    </message>
+    <message>
+        <location filename="../Debugger/DebugViewer.py" line="85"/>
         <source>State</source>
         <translation>Stato</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="846"/>
+        <location filename="../Debugger/DebugViewer.py" line="838"/>
         <source>waiting at breakpoint</source>
         <translation>in attesa ad un breakpoint</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="850"/>
+        <location filename="../Debugger/DebugViewer.py" line="843"/>
         <source>running</source>
         <translation>in esecuzione</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="81"/>
-        <source>Debuggers:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Debugger/DebugViewer.py" line="848"/>
+        <location filename="../Debugger/DebugViewer.py" line="834"/>
         <source>waiting at exception</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="852"/>
+        <location filename="../Debugger/DebugViewer.py" line="786"/>
         <source>unknown state ({0})</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="763"/>
+        <location filename="../Debugger/DebugViewer.py" line="673"/>
         <source>&lt;p&gt;Debugger with ID &lt;b&gt;{0}&lt;/b&gt; has been connected.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="190"/>
+        <location filename="../Debugger/DebugViewer.py" line="192"/>
         <source>Shows the list of local variables and their values.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="210"/>
+        <location filename="../Debugger/DebugViewer.py" line="212"/>
         <source>Shows the current call stack.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="223"/>
+        <location filename="../Debugger/DebugViewer.py" line="225"/>
         <source>Shows a trace of the program flow.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="235"/>
+        <location filename="../Debugger/DebugViewer.py" line="237"/>
         <source>Shows a list of defined breakpoints.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="247"/>
+        <location filename="../Debugger/DebugViewer.py" line="249"/>
         <source>Shows a list of defined watchpoints.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="257"/>
+        <location filename="../Debugger/DebugViewer.py" line="259"/>
         <source>Shows a list of raised exceptions.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="268"/>
+        <location filename="../Debugger/DebugViewer.py" line="270"/>
         <source>Shows a code disassembly in case of an exception.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="134"/>
+        <location filename="../Debugger/DebugViewer.py" line="136"/>
         <source>Shows the list of global variables and their values.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../Debugger/DebugViewer.py" line="82"/>
+        <source>Debuggers and Threads:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>DebuggerGeneralPage</name>
--- a/eric6/i18n/eric6_pt.ts	Mon Dec 28 19:43:35 2020 +0100
+++ b/eric6/i18n/eric6_pt.ts	Tue Dec 29 20:06:50 2020 +0100
@@ -7602,115 +7602,115 @@
 <context>
     <name>DebugViewer</name>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="172"/>
+        <location filename="../Debugger/DebugViewer.py" line="174"/>
         <source>Enter regular expression patterns separated by &apos;;&apos; to define variable filters. </source>
         <translation>Introduzir padrões de expressões regulares separados por &apos;;&apos; para definir os filtros de variáveis. </translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="176"/>
+        <location filename="../Debugger/DebugViewer.py" line="178"/>
         <source>Enter regular expression patterns separated by &apos;;&apos; to define variable filters. All variables and class attributes matched by one of the expressions are not shown in the list above.</source>
         <translation>Introduza padrões de expressões regulares separados por &apos;;&apos; para definir os filtros de variáveis. Todos os atributos de classes e variáveis que coincidam com uma das expressões não se mostrarão na lista de cima.</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="182"/>
+        <location filename="../Debugger/DebugViewer.py" line="184"/>
         <source>Set</source>
         <translation>Definir</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="157"/>
+        <location filename="../Debugger/DebugViewer.py" line="159"/>
         <source>Source</source>
         <translation>Fonte</translation>
     </message>
     <message>
         <location filename="../Debugger/DebugViewer.py" line="278"/>
         <source>Threads:</source>
-        <translation>Segmentos:</translation>
-    </message>
-    <message>
-        <location filename="../Debugger/DebugViewer.py" line="83"/>
+        <translation type="obsolete">Segmentos:</translation>
+    </message>
+    <message>
+        <location filename="../Debugger/DebugViewer.py" line="85"/>
         <source>ID</source>
         <translation></translation>
     </message>
     <message>
         <location filename="../Debugger/DebugViewer.py" line="280"/>
         <source>Name</source>
-        <translation>Nome</translation>
-    </message>
-    <message>
-        <location filename="../Debugger/DebugViewer.py" line="280"/>
+        <translation type="obsolete">Nome</translation>
+    </message>
+    <message>
+        <location filename="../Debugger/DebugViewer.py" line="85"/>
         <source>State</source>
         <translation>Estado</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="846"/>
+        <location filename="../Debugger/DebugViewer.py" line="838"/>
         <source>waiting at breakpoint</source>
         <translation>à espera no ponto de interrupção</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="850"/>
+        <location filename="../Debugger/DebugViewer.py" line="843"/>
         <source>running</source>
         <translation>a executar</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="81"/>
-        <source>Debuggers:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Debugger/DebugViewer.py" line="848"/>
+        <location filename="../Debugger/DebugViewer.py" line="834"/>
         <source>waiting at exception</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="852"/>
+        <location filename="../Debugger/DebugViewer.py" line="786"/>
         <source>unknown state ({0})</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="763"/>
+        <location filename="../Debugger/DebugViewer.py" line="673"/>
         <source>&lt;p&gt;Debugger with ID &lt;b&gt;{0}&lt;/b&gt; has been connected.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="190"/>
+        <location filename="../Debugger/DebugViewer.py" line="192"/>
         <source>Shows the list of local variables and their values.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="210"/>
+        <location filename="../Debugger/DebugViewer.py" line="212"/>
         <source>Shows the current call stack.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="223"/>
+        <location filename="../Debugger/DebugViewer.py" line="225"/>
         <source>Shows a trace of the program flow.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="235"/>
+        <location filename="../Debugger/DebugViewer.py" line="237"/>
         <source>Shows a list of defined breakpoints.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="247"/>
+        <location filename="../Debugger/DebugViewer.py" line="249"/>
         <source>Shows a list of defined watchpoints.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="257"/>
+        <location filename="../Debugger/DebugViewer.py" line="259"/>
         <source>Shows a list of raised exceptions.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="268"/>
+        <location filename="../Debugger/DebugViewer.py" line="270"/>
         <source>Shows a code disassembly in case of an exception.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="134"/>
+        <location filename="../Debugger/DebugViewer.py" line="136"/>
         <source>Shows the list of global variables and their values.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../Debugger/DebugViewer.py" line="82"/>
+        <source>Debuggers and Threads:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>DebuggerGeneralPage</name>
--- a/eric6/i18n/eric6_ru.ts	Mon Dec 28 19:43:35 2020 +0100
+++ b/eric6/i18n/eric6_ru.ts	Tue Dec 29 20:06:50 2020 +0100
@@ -7352,115 +7352,120 @@
 <context>
     <name>DebugViewer</name>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="172"/>
+        <location filename="../Debugger/DebugViewer.py" line="174"/>
         <source>Enter regular expression patterns separated by &apos;;&apos; to define variable filters. </source>
         <translation>Задайте для фильтров переменных маски регулярных выражений, разделённые &apos;;&apos;. </translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="176"/>
+        <location filename="../Debugger/DebugViewer.py" line="178"/>
         <source>Enter regular expression patterns separated by &apos;;&apos; to define variable filters. All variables and class attributes matched by one of the expressions are not shown in the list above.</source>
         <translation>Задайте для фильтров переменных регулярные выражения, разделённые &apos;;&apos;. Все переменные и атрибуты классов, совпавшие с одним из этих выражений, не показываются в списке выше.</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="182"/>
+        <location filename="../Debugger/DebugViewer.py" line="184"/>
         <source>Set</source>
         <translation>Установить</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="157"/>
+        <location filename="../Debugger/DebugViewer.py" line="159"/>
         <source>Source</source>
         <translation>Исходный текст</translation>
     </message>
     <message>
         <location filename="../Debugger/DebugViewer.py" line="278"/>
         <source>Threads:</source>
-        <translation>Потоки:</translation>
-    </message>
-    <message>
-        <location filename="../Debugger/DebugViewer.py" line="83"/>
+        <translation type="obsolete">Потоки:</translation>
+    </message>
+    <message>
+        <location filename="../Debugger/DebugViewer.py" line="85"/>
         <source>ID</source>
         <translation>ID</translation>
     </message>
     <message>
         <location filename="../Debugger/DebugViewer.py" line="280"/>
         <source>Name</source>
-        <translation>Имя</translation>
-    </message>
-    <message>
-        <location filename="../Debugger/DebugViewer.py" line="280"/>
+        <translation type="obsolete">Имя</translation>
+    </message>
+    <message>
+        <location filename="../Debugger/DebugViewer.py" line="85"/>
         <source>State</source>
         <translation>Состояние</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="846"/>
+        <location filename="../Debugger/DebugViewer.py" line="838"/>
         <source>waiting at breakpoint</source>
         <translation>В точке останова</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="850"/>
+        <location filename="../Debugger/DebugViewer.py" line="843"/>
         <source>running</source>
         <translation>выполняется</translation>
     </message>
     <message>
         <location filename="../Debugger/DebugViewer.py" line="81"/>
         <source>Debuggers:</source>
-        <translation>Отладчики:</translation>
-    </message>
-    <message>
-        <location filename="../Debugger/DebugViewer.py" line="848"/>
+        <translation type="obsolete">Отладчики:</translation>
+    </message>
+    <message>
+        <location filename="../Debugger/DebugViewer.py" line="834"/>
         <source>waiting at exception</source>
         <translation>ожидание исключения</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="852"/>
+        <location filename="../Debugger/DebugViewer.py" line="786"/>
         <source>unknown state ({0})</source>
         <translation>неизвестное состояние ({0})</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="763"/>
+        <location filename="../Debugger/DebugViewer.py" line="673"/>
         <source>&lt;p&gt;Debugger with ID &lt;b&gt;{0}&lt;/b&gt; has been connected.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Подключен отладчик с ID &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="190"/>
+        <location filename="../Debugger/DebugViewer.py" line="192"/>
         <source>Shows the list of local variables and their values.</source>
         <translation>Отображение списка глобальных переменных и их значений.</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="210"/>
+        <location filename="../Debugger/DebugViewer.py" line="212"/>
         <source>Shows the current call stack.</source>
         <translation>Отображение текущего стека вызовов.</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="223"/>
+        <location filename="../Debugger/DebugViewer.py" line="225"/>
         <source>Shows a trace of the program flow.</source>
         <translation>Отображение трека выполнения программы.</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="235"/>
+        <location filename="../Debugger/DebugViewer.py" line="237"/>
         <source>Shows a list of defined breakpoints.</source>
         <translation>Отображение списка определенных точек останова.</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="247"/>
+        <location filename="../Debugger/DebugViewer.py" line="249"/>
         <source>Shows a list of defined watchpoints.</source>
         <translation>Отображение списка определенных точек наблюдения.</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="257"/>
+        <location filename="../Debugger/DebugViewer.py" line="259"/>
         <source>Shows a list of raised exceptions.</source>
         <translation>Отображение списка возникших исключений.</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="268"/>
+        <location filename="../Debugger/DebugViewer.py" line="270"/>
         <source>Shows a code disassembly in case of an exception.</source>
         <translation>Отображение дизассемблированного кода в случае исключения.</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="134"/>
+        <location filename="../Debugger/DebugViewer.py" line="136"/>
         <source>Shows the list of global variables and their values.</source>
         <translation>Отображение списка глобальных переменных и их значений.</translation>
     </message>
+    <message>
+        <location filename="../Debugger/DebugViewer.py" line="82"/>
+        <source>Debuggers and Threads:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>DebuggerGeneralPage</name>
--- a/eric6/i18n/eric6_tr.ts	Mon Dec 28 19:43:35 2020 +0100
+++ b/eric6/i18n/eric6_tr.ts	Tue Dec 29 20:06:50 2020 +0100
@@ -7478,115 +7478,115 @@
 <context>
     <name>DebugViewer</name>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="172"/>
+        <location filename="../Debugger/DebugViewer.py" line="174"/>
         <source>Enter regular expression patterns separated by &apos;;&apos; to define variable filters. </source>
         <translation>Değişken filtreleri için düzenli ifadelerin şablonlarını &apos;;&apos; ile ayırarak giriniz.</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="176"/>
+        <location filename="../Debugger/DebugViewer.py" line="178"/>
         <source>Enter regular expression patterns separated by &apos;;&apos; to define variable filters. All variables and class attributes matched by one of the expressions are not shown in the list above.</source>
         <translation>Değişken filtreleri için düzenli ifadelerin şablonlarını &apos;;&apos; ile ayırarak giriniz.Düzenli ifadelerdeki  tüm değişkenler ve sınıf nitelikleri listede gösterildiğinden farklı olmamalıdır.</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="182"/>
+        <location filename="../Debugger/DebugViewer.py" line="184"/>
         <source>Set</source>
         <translation>Ayarla</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="157"/>
+        <location filename="../Debugger/DebugViewer.py" line="159"/>
         <source>Source</source>
         <translation>Kaynak</translation>
     </message>
     <message>
         <location filename="../Debugger/DebugViewer.py" line="278"/>
         <source>Threads:</source>
-        <translation>Bağlantılar:</translation>
-    </message>
-    <message>
-        <location filename="../Debugger/DebugViewer.py" line="83"/>
+        <translation type="obsolete">Bağlantılar:</translation>
+    </message>
+    <message>
+        <location filename="../Debugger/DebugViewer.py" line="85"/>
         <source>ID</source>
         <translation>ID</translation>
     </message>
     <message>
         <location filename="../Debugger/DebugViewer.py" line="280"/>
         <source>Name</source>
-        <translation>Adı</translation>
-    </message>
-    <message>
-        <location filename="../Debugger/DebugViewer.py" line="280"/>
+        <translation type="obsolete">Adı</translation>
+    </message>
+    <message>
+        <location filename="../Debugger/DebugViewer.py" line="85"/>
         <source>State</source>
         <translation>Durum</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="846"/>
+        <location filename="../Debugger/DebugViewer.py" line="838"/>
         <source>waiting at breakpoint</source>
         <translation>Bekleme oktasında bekleniyor</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="850"/>
+        <location filename="../Debugger/DebugViewer.py" line="843"/>
         <source>running</source>
         <translation>çalışıyor</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="81"/>
-        <source>Debuggers:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Debugger/DebugViewer.py" line="848"/>
+        <location filename="../Debugger/DebugViewer.py" line="834"/>
         <source>waiting at exception</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="852"/>
+        <location filename="../Debugger/DebugViewer.py" line="786"/>
         <source>unknown state ({0})</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="763"/>
+        <location filename="../Debugger/DebugViewer.py" line="673"/>
         <source>&lt;p&gt;Debugger with ID &lt;b&gt;{0}&lt;/b&gt; has been connected.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="190"/>
+        <location filename="../Debugger/DebugViewer.py" line="192"/>
         <source>Shows the list of local variables and their values.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="210"/>
+        <location filename="../Debugger/DebugViewer.py" line="212"/>
         <source>Shows the current call stack.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="223"/>
+        <location filename="../Debugger/DebugViewer.py" line="225"/>
         <source>Shows a trace of the program flow.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="235"/>
+        <location filename="../Debugger/DebugViewer.py" line="237"/>
         <source>Shows a list of defined breakpoints.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="247"/>
+        <location filename="../Debugger/DebugViewer.py" line="249"/>
         <source>Shows a list of defined watchpoints.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="257"/>
+        <location filename="../Debugger/DebugViewer.py" line="259"/>
         <source>Shows a list of raised exceptions.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="268"/>
+        <location filename="../Debugger/DebugViewer.py" line="270"/>
         <source>Shows a code disassembly in case of an exception.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="134"/>
+        <location filename="../Debugger/DebugViewer.py" line="136"/>
         <source>Shows the list of global variables and their values.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../Debugger/DebugViewer.py" line="82"/>
+        <source>Debuggers and Threads:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>DebuggerGeneralPage</name>
--- a/eric6/i18n/eric6_zh_CN.ts	Mon Dec 28 19:43:35 2020 +0100
+++ b/eric6/i18n/eric6_zh_CN.ts	Tue Dec 29 20:06:50 2020 +0100
@@ -7511,115 +7511,110 @@
 <context>
     <name>DebugViewer</name>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="172"/>
+        <location filename="../Debugger/DebugViewer.py" line="174"/>
         <source>Enter regular expression patterns separated by &apos;;&apos; to define variable filters. </source>
         <translation>输入正则表达式模块(模块间用“;”分隔)以定义变量过滤器。</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="176"/>
+        <location filename="../Debugger/DebugViewer.py" line="178"/>
         <source>Enter regular expression patterns separated by &apos;;&apos; to define variable filters. All variables and class attributes matched by one of the expressions are not shown in the list above.</source>
         <translation>输入正则表达式模块(模块间用“;”分隔)以定义变量过滤器。所有与表达式中的一个模块匹配的变量和类属性不会显示在以上列表中。</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="182"/>
+        <location filename="../Debugger/DebugViewer.py" line="184"/>
         <source>Set</source>
         <translation>设置</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="157"/>
+        <location filename="../Debugger/DebugViewer.py" line="159"/>
         <source>Source</source>
         <translation>源文件</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="278"/>
-        <source>Threads:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Debugger/DebugViewer.py" line="83"/>
+        <location filename="../Debugger/DebugViewer.py" line="85"/>
         <source>ID</source>
         <translation>ID</translation>
     </message>
     <message>
         <location filename="../Debugger/DebugViewer.py" line="280"/>
         <source>Name</source>
-        <translation>名称</translation>
-    </message>
-    <message>
-        <location filename="../Debugger/DebugViewer.py" line="280"/>
+        <translation type="obsolete">名称</translation>
+    </message>
+    <message>
+        <location filename="../Debugger/DebugViewer.py" line="85"/>
         <source>State</source>
         <translation>状态</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="846"/>
+        <location filename="../Debugger/DebugViewer.py" line="838"/>
         <source>waiting at breakpoint</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="850"/>
+        <location filename="../Debugger/DebugViewer.py" line="843"/>
         <source>running</source>
         <translation>运行中</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="81"/>
-        <source>Debuggers:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Debugger/DebugViewer.py" line="848"/>
+        <location filename="../Debugger/DebugViewer.py" line="834"/>
         <source>waiting at exception</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="852"/>
+        <location filename="../Debugger/DebugViewer.py" line="786"/>
         <source>unknown state ({0})</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="763"/>
+        <location filename="../Debugger/DebugViewer.py" line="673"/>
         <source>&lt;p&gt;Debugger with ID &lt;b&gt;{0}&lt;/b&gt; has been connected.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="190"/>
+        <location filename="../Debugger/DebugViewer.py" line="192"/>
         <source>Shows the list of local variables and their values.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="210"/>
+        <location filename="../Debugger/DebugViewer.py" line="212"/>
         <source>Shows the current call stack.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="223"/>
+        <location filename="../Debugger/DebugViewer.py" line="225"/>
         <source>Shows a trace of the program flow.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="235"/>
+        <location filename="../Debugger/DebugViewer.py" line="237"/>
         <source>Shows a list of defined breakpoints.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="247"/>
+        <location filename="../Debugger/DebugViewer.py" line="249"/>
         <source>Shows a list of defined watchpoints.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="257"/>
+        <location filename="../Debugger/DebugViewer.py" line="259"/>
         <source>Shows a list of raised exceptions.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="268"/>
+        <location filename="../Debugger/DebugViewer.py" line="270"/>
         <source>Shows a code disassembly in case of an exception.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugViewer.py" line="134"/>
+        <location filename="../Debugger/DebugViewer.py" line="136"/>
         <source>Shows the list of global variables and their values.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../Debugger/DebugViewer.py" line="82"/>
+        <source>Debuggers and Threads:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>DebuggerGeneralPage</name>

eric ide

mercurial