Call Trace Viewer, Call Stack Viewer: some refinements and further adaptions to the multi-process debugger.

Wed, 30 Dec 2020 13:45:26 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Wed, 30 Dec 2020 13:45:26 +0100
changeset 7927
866ddf957461
parent 7926
5357e5ffebf1
child 7928
a78ce4578fed

Call Trace Viewer, Call Stack Viewer: some refinements and further adaptions to the multi-process debugger.

eric6/APIs/Python3/eric6.api file | annotate | diff | comparison | revisions
eric6/APIs/Python3/eric6.bas file | annotate | diff | comparison | revisions
eric6/Debugger/CallStackViewer.py file | annotate | diff | comparison | revisions
eric6/Debugger/CallTraceViewer.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.DebugClients.Python.DebugClientBase.html file | annotate | diff | comparison | revisions
eric6/Documentation/Source/eric6.Debugger.CallStackViewer.html file | annotate | diff | comparison | revisions
eric6/Documentation/Source/install.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	Wed Dec 30 12:31:25 2020 +0100
+++ b/eric6/APIs/Python3/eric6.api	Wed Dec 30 13:45:26 2020 +0100
@@ -497,6 +497,7 @@
 eric6.Debugger.BreakPointViewer.BreakPointViewer?1(parent=None)
 eric6.Debugger.CallStackViewer.CallStackViewer.FilenameRole?7
 eric6.Debugger.CallStackViewer.CallStackViewer.LinenoRole?7
+eric6.Debugger.CallStackViewer.CallStackViewer.clear?4()
 eric6.Debugger.CallStackViewer.CallStackViewer.frameSelected?7
 eric6.Debugger.CallStackViewer.CallStackViewer.setDebugger?4(debugUI)
 eric6.Debugger.CallStackViewer.CallStackViewer.setProjectMode?4(enabled)
@@ -11890,6 +11891,7 @@
 install.createGlobalPluginsDir?4()
 install.createInstallConfig?4()
 install.createInstallInfo?4()
+install.createInstallInfoFile?7
 install.createLinuxSpecifics?4()
 install.createMacAppBundle?4(pydir)
 install.createPyWrapper?4(pydir, wfile, saveDir, isGuiScript=True)
--- a/eric6/APIs/Python3/eric6.bas	Wed Dec 30 12:31:25 2020 +0100
+++ b/eric6/APIs/Python3/eric6.bas	Wed Dec 30 13:45:26 2020 +0100
@@ -60,7 +60,7 @@
 BrowserSortFilterProxyModel QSortFilterProxyModel
 BrowserSysPathItem BrowserItem
 BugBearVisitor ast.NodeVisitor
-CallStackViewer QTreeWidget
+CallStackViewer QWidget
 CallTraceViewer QWidget Ui_CallTraceViewer
 ChangeBookmarkCommand QUndoCommand
 Charset str
--- a/eric6/Debugger/CallStackViewer.py	Wed Dec 30 12:31:25 2020 +0100
+++ b/eric6/Debugger/CallStackViewer.py	Wed Dec 30 13:45:26 2020 +0100
@@ -8,7 +8,9 @@
 """
 
 from PyQt5.QtCore import pyqtSignal, Qt, QFileInfo
-from PyQt5.QtWidgets import QTreeWidget, QTreeWidgetItem, QMenu
+from PyQt5.QtWidgets import (
+    QTreeWidget, QTreeWidgetItem, QMenu, QWidget, QVBoxLayout, QLabel
+)
 
 from E5Gui.E5Application import e5App
 from E5Gui import E5FileDialog, E5MessageBox
@@ -16,7 +18,7 @@
 import Utilities
 
 
-class CallStackViewer(QTreeWidget):
+class CallStackViewer(QWidget):
     """
     Class implementing the Call Stack viewer widget.
     
@@ -33,25 +35,35 @@
         """
         Constructor
         
-        @param debugServer reference to the debug server object (DebugServer)
-        @param parent reference to the parent widget (QWidget)
+        @param debugServer reference to the debug server object
+        @type DebugServer
+        @param parent reference to the parent widget
+        @type QWidget
         """
         super(CallStackViewer, self).__init__(parent)
         
-        self.setHeaderHidden(True)
-        self.setAlternatingRowColors(True)
-        self.setItemsExpandable(False)
-        self.setRootIsDecorated(False)
+        self.__layout = QVBoxLayout(self)
+        self.setLayout(self.__layout)
+        self.__debuggerLabel = QLabel(self)
+        self.__layout.addWidget(self.__debuggerLabel)
+        self.__callStackList = QTreeWidget(self)
+        self.__layout.addWidget(self.__callStackList)
+        
+        self.__callStackList.setHeaderHidden(True)
+        self.__callStackList.setAlternatingRowColors(True)
+        self.__callStackList.setItemsExpandable(False)
+        self.__callStackList.setRootIsDecorated(False)
         self.setWindowTitle(self.tr("Call Stack"))
         
-        self.__menu = QMenu(self)
+        self.__menu = QMenu(self.__callStackList)
         self.__sourceAct = self.__menu.addAction(
             self.tr("Show source"), self.__openSource)
-        self.__menu.addAction(self.tr("Clear"), self.clear)
+        self.__menu.addAction(self.tr("Clear"), self.__callStackList.clear)
         self.__menu.addSeparator()
         self.__menu.addAction(self.tr("Save"), self.__saveStackTrace)
-        self.setContextMenuPolicy(Qt.CustomContextMenu)
-        self.customContextMenuRequested.connect(self.__showContextMenu)
+        self.__callStackList.setContextMenuPolicy(Qt.CustomContextMenu)
+        self.__callStackList.customContextMenuRequested.connect(
+            self.__showContextMenu)
         
         self.__dbs = debugServer
         
@@ -64,13 +76,15 @@
         self.__project = None
         
         self.__dbs.clientStack.connect(self.__showCallStack)
-        self.itemDoubleClicked.connect(self.__itemDoubleClicked)
+        self.__callStackList.itemDoubleClicked.connect(
+            self.__itemDoubleClicked)
     
     def setDebugger(self, debugUI):
         """
         Public method to set a reference to the Debug UI.
         
-        @param debugUI reference to the DebugUI object (DebugUI)
+        @param debugUI reference to the DebugUI object
+        @type DebugUI
         """
         debugUI.clientStack.connect(self.__showCallStack)
     
@@ -81,7 +95,8 @@
         In project mode the call trace info is shown with project relative
         path names.
         
-        @param enabled flag indicating to enable the project mode (boolean)
+        @param enabled flag indicating to enable the project mode
+        @type bool
         """
         self.__projectMode = enabled
         if enabled and self.__project is None:
@@ -91,22 +106,34 @@
         """
         Private slot to show the context menu.
         
-        @param coord the position of the mouse pointer (QPoint)
+        @param coord the position of the mouse pointer
+        @type QPoint
         """
-        if self.topLevelItemCount() > 0:
-            itm = self.currentItem()
+        if self.__callStackList.topLevelItemCount() > 0:
+            itm = self.__callStackList.currentItem()
             self.__sourceAct.setEnabled(itm is not None)
-            self.__menu.popup(self.mapToGlobal(coord))
+            self.__menu.popup(self.__callStackList.mapToGlobal(coord))
     
-    def __showCallStack(self, stack):
+    def clear(self):
+        """
+        Public method to clear the stack viewer data.
+        """
+        self.__debuggerLabel.clear()
+        self.__callStackList.clear()
+    
+    def __showCallStack(self, stack, debuggerId):
         """
         Private slot to show the call stack of the program being debugged.
         
         @param stack list of tuples with call stack data (file name,
             line number, function name, formatted argument/values list)
         @type list of tuples of (str, str, str, str)
+        @param debuggerId ID of the debugger backend
+        @type str
         """
-        self.clear()
+        self.__debuggerLabel.setText(debuggerId)
+        
+        self.__callStackList.clear()
         for fname, fline, ffunc, fargs in stack:
             if self.__projectMode:
                 dfname = self.__project.getRelativePath(fname)
@@ -115,22 +142,26 @@
             if ffunc and not ffunc.startswith("<"):
                 # use normal format
                 itm = QTreeWidgetItem(
-                    self,
-                    [self.__entryFormat.format(dfname, fline, ffunc, fargs)])
+                    self.__callStackList,
+                    [self.__entryFormat.format(dfname, fline, ffunc, fargs)]
+                )
             else:
                 # use short format
                 itm = QTreeWidgetItem(
-                    self, [self.__entryFormatShort.format(dfname, fline)])
+                    self.__callStackList,
+                    [self.__entryFormatShort.format(dfname, fline)]
+                )
             itm.setData(0, self.FilenameRole, fname)
             itm.setData(0, self.LinenoRole, fline)
         
-        self.resizeColumnToContents(0)
+        self.__callStackList.resizeColumnToContents(0)
     
     def __itemDoubleClicked(self, itm):
         """
         Private slot to handle a double click of a stack entry.
         
-        @param itm reference to the double clicked item (QTreeWidgetItem)
+        @param itm reference to the double clicked item
+        @type QTreeWidgetItem
         """
         fname = itm.data(0, self.FilenameRole)
         fline = itm.data(0, self.LinenoRole)
@@ -138,14 +169,14 @@
             fname = self.__project.getAbsolutePath(fname)
         self.sourceFile.emit(fname, fline)
         
-        index = self.indexOfTopLevelItem(itm)
+        index = self.__callStackList.indexOfTopLevelItem(itm)
         self.frameSelected.emit(index)
     
     def __openSource(self):
         """
         Private slot to show the source for the selected stack entry.
         """
-        itm = self.currentItem()
+        itm = self.__callStackList.currentItem()
         if itm:
             self.__itemDoubleClicked(itm)
     
@@ -153,7 +184,7 @@
         """
         Private slot to save the stack trace info to a file.
         """
-        if self.topLevelItemCount() > 0:
+        if self.__callStackList.topLevelItemCount() > 0:
             fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
                 self,
                 self.tr("Save Call Stack Info"),
@@ -179,12 +210,16 @@
                     fname = Utilities.toNativeSeparators(fname)
                 
                 try:
+                    title = self.tr("Call Stack of '{0}'").format(
+                        self.__debuggerLabel.text())
                     with open(fname, "w", encoding="utf-8") as f:
-                        itm = self.topLevelItem(0)
+                        f.write("{0}\n".format(title))
+                        f.write("{0}\n\n".format(len(title) * "="))
+                        itm = self.__callStackList.topLevelItem(0)
                         while itm is not None:
                             f.write("{0}\n".format(itm.text(0)))
-                            f.write(78 * "=" + "\n")
-                            itm = self.itemBelow(itm)
+                            f.write("{0}\n".format(78 * "="))
+                            itm = self.__callStackList.itemBelow(itm)
                 except OSError as err:
                     E5MessageBox.critical(
                         self,
--- a/eric6/Debugger/CallTraceViewer.py	Wed Dec 30 12:31:25 2020 +0100
+++ b/eric6/Debugger/CallTraceViewer.py	Wed Dec 30 13:45:26 2020 +0100
@@ -177,7 +177,11 @@
                     fname = Utilities.toNativeSeparators(fname)
                 
                 try:
+                    title = self.tr("Call Trace Info of '{0}'").format(
+                        self.__tracedDebuggerId)
                     with open(fname, "w", encoding="utf-8") as f:
+                        f.write("{0}\n".format(title))
+                        f.write("{0}\n\n".format(len(title) * "="))
                         itm = self.callTrace.topLevelItem(0)
                         while itm is not None:
                             isCall = itm.data(0, Qt.UserRole)
Binary file eric6/Documentation/Help/source.qch has changed
--- a/eric6/Documentation/Help/source.qhp	Wed Dec 30 12:31:25 2020 +0100
+++ b/eric6/Documentation/Help/source.qhp	Wed Dec 30 13:45:26 2020 +0100
@@ -2307,6 +2307,7 @@
       <keyword name="CallStackViewer.__saveStackTrace" id="CallStackViewer.__saveStackTrace" ref="eric6.Debugger.CallStackViewer.html#CallStackViewer.__saveStackTrace" />
       <keyword name="CallStackViewer.__showCallStack" id="CallStackViewer.__showCallStack" ref="eric6.Debugger.CallStackViewer.html#CallStackViewer.__showCallStack" />
       <keyword name="CallStackViewer.__showContextMenu" id="CallStackViewer.__showContextMenu" ref="eric6.Debugger.CallStackViewer.html#CallStackViewer.__showContextMenu" />
+      <keyword name="CallStackViewer.clear" id="CallStackViewer.clear" ref="eric6.Debugger.CallStackViewer.html#CallStackViewer.clear" />
       <keyword name="CallStackViewer.setDebugger" id="CallStackViewer.setDebugger" ref="eric6.Debugger.CallStackViewer.html#CallStackViewer.setDebugger" />
       <keyword name="CallStackViewer.setProjectMode" id="CallStackViewer.setProjectMode" ref="eric6.Debugger.CallStackViewer.html#CallStackViewer.setProjectMode" />
       <keyword name="CallTraceViewer" id="CallTraceViewer" ref="eric6.Debugger.CallTraceViewer.html#CallTraceViewer" />
--- a/eric6/Documentation/Source/eric6.DebugClients.Python.DebugClientBase.html	Wed Dec 30 12:31:25 2020 +0100
+++ b/eric6/Documentation/Source/eric6.DebugClients.Python.DebugClientBase.html	Wed Dec 30 13:45:26 2020 +0100
@@ -914,7 +914,7 @@
 
 <dt><i>stream</i></dt>
 <dd>
-file like object that has data to be written
+file like object that has data to be read
 </dd>
 </dl>
 <dl>
--- a/eric6/Documentation/Source/eric6.Debugger.CallStackViewer.html	Wed Dec 30 12:31:25 2020 +0100
+++ b/eric6/Documentation/Source/eric6.Debugger.CallStackViewer.html	Wed Dec 30 13:45:26 2020 +0100
@@ -65,7 +65,7 @@
 </dd>
 </dl>
 <h3>Derived from</h3>
-QTreeWidget
+QWidget
 <h3>Class Attributes</h3>
 
 <table>
@@ -105,6 +105,10 @@
 <td>Private slot to show the context menu.</td>
 </tr>
 <tr>
+<td><a href="#CallStackViewer.clear">clear</a></td>
+<td>Public method to clear the stack viewer data.</td>
+</tr>
+<tr>
 <td><a href="#CallStackViewer.setDebugger">setDebugger</a></td>
 <td>Public method to set a reference to the Debug UI.</td>
 </tr>
@@ -128,13 +132,13 @@
 </p>
 <dl>
 
-<dt><i>debugServer</i></dt>
+<dt><i>debugServer</i> (DebugServer)</dt>
 <dd>
-reference to the debug server object (DebugServer)
+reference to the debug server object
 </dd>
-<dt><i>parent</i></dt>
+<dt><i>parent</i> (QWidget)</dt>
 <dd>
-reference to the parent widget (QWidget)
+reference to the parent widget
 </dd>
 </dl>
 <a NAME="CallStackViewer.__itemDoubleClicked" ID="CallStackViewer.__itemDoubleClicked"></a>
@@ -146,9 +150,9 @@
 </p>
 <dl>
 
-<dt><i>itm</i></dt>
+<dt><i>itm</i> (QTreeWidgetItem)</dt>
 <dd>
-reference to the double clicked item (QTreeWidgetItem)
+reference to the double clicked item
 </dd>
 </dl>
 <a NAME="CallStackViewer.__openSource" ID="CallStackViewer.__openSource"></a>
@@ -167,7 +171,7 @@
 </p>
 <a NAME="CallStackViewer.__showCallStack" ID="CallStackViewer.__showCallStack"></a>
 <h4>CallStackViewer.__showCallStack</h4>
-<b>__showCallStack</b>(<i>stack</i>)
+<b>__showCallStack</b>(<i>stack, debuggerId</i>)
 
 <p>
         Private slot to show the call stack of the program being debugged.
@@ -179,6 +183,10 @@
 list of tuples with call stack data (file name,
             line number, function name, formatted argument/values list)
 </dd>
+<dt><i>debuggerId</i> (str)</dt>
+<dd>
+ID of the debugger backend
+</dd>
 </dl>
 <a NAME="CallStackViewer.__showContextMenu" ID="CallStackViewer.__showContextMenu"></a>
 <h4>CallStackViewer.__showContextMenu</h4>
@@ -189,11 +197,18 @@
 </p>
 <dl>
 
-<dt><i>coord</i></dt>
+<dt><i>coord</i> (QPoint)</dt>
 <dd>
-the position of the mouse pointer (QPoint)
+the position of the mouse pointer
 </dd>
 </dl>
+<a NAME="CallStackViewer.clear" ID="CallStackViewer.clear"></a>
+<h4>CallStackViewer.clear</h4>
+<b>clear</b>(<i></i>)
+
+<p>
+        Public method to clear the stack viewer data.
+</p>
 <a NAME="CallStackViewer.setDebugger" ID="CallStackViewer.setDebugger"></a>
 <h4>CallStackViewer.setDebugger</h4>
 <b>setDebugger</b>(<i>debugUI</i>)
@@ -203,9 +218,9 @@
 </p>
 <dl>
 
-<dt><i>debugUI</i></dt>
+<dt><i>debugUI</i> (DebugUI)</dt>
 <dd>
-reference to the DebugUI object (DebugUI)
+reference to the DebugUI object
 </dd>
 </dl>
 <a NAME="CallStackViewer.setProjectMode" ID="CallStackViewer.setProjectMode"></a>
@@ -221,9 +236,9 @@
 </p>
 <dl>
 
-<dt><i>enabled</i></dt>
+<dt><i>enabled</i> (bool)</dt>
 <dd>
-flag indicating to enable the project mode (boolean)
+flag indicating to enable the project mode
 </dd>
 </dl>
 <div align="right"><a href="#top">Up</a></div>
--- a/eric6/Documentation/Source/install.html	Wed Dec 30 12:31:25 2020 +0100
+++ b/eric6/Documentation/Source/install.html	Wed Dec 30 13:45:26 2020 +0100
@@ -28,7 +28,7 @@
 <h3>Global Attributes</h3>
 
 <table>
-<tr><td>BlackLists</td></tr><tr><td>PlatformsBlackLists</td></tr><tr><td>apisDir</td></tr><tr><td>cfg</td></tr><tr><td>configLength</td></tr><tr><td>configName</td></tr><tr><td>currDir</td></tr><tr><td>defaultMacAppBundleName</td></tr><tr><td>defaultMacAppBundlePath</td></tr><tr><td>defaultMacPythonExe</td></tr><tr><td>distDir</td></tr><tr><td>doCleanDesktopLinks</td></tr><tr><td>doCleanup</td></tr><tr><td>doCompile</td></tr><tr><td>eric6SourceDir</td></tr><tr><td>forceCleanDesktopLinks</td></tr><tr><td>ignorePyqt5Tools</td></tr><tr><td>installApis</td></tr><tr><td>installCwd</td></tr><tr><td>installInfo</td></tr><tr><td>installInfoName</td></tr><tr><td>macAppBundleName</td></tr><tr><td>macAppBundlePath</td></tr><tr><td>macPythonExe</td></tr><tr><td>modDir</td></tr><tr><td>platBinDir</td></tr><tr><td>platBinDirOld</td></tr><tr><td>progLanguages</td></tr><tr><td>progName</td></tr><tr><td>pyModDir</td></tr><tr><td>sourceDir</td></tr><tr><td>yes2All</td></tr>
+<tr><td>BlackLists</td></tr><tr><td>PlatformsBlackLists</td></tr><tr><td>apisDir</td></tr><tr><td>cfg</td></tr><tr><td>configLength</td></tr><tr><td>configName</td></tr><tr><td>createInstallInfoFile</td></tr><tr><td>currDir</td></tr><tr><td>defaultMacAppBundleName</td></tr><tr><td>defaultMacAppBundlePath</td></tr><tr><td>defaultMacPythonExe</td></tr><tr><td>distDir</td></tr><tr><td>doCleanDesktopLinks</td></tr><tr><td>doCleanup</td></tr><tr><td>doCompile</td></tr><tr><td>eric6SourceDir</td></tr><tr><td>forceCleanDesktopLinks</td></tr><tr><td>ignorePyqt5Tools</td></tr><tr><td>installApis</td></tr><tr><td>installCwd</td></tr><tr><td>installInfo</td></tr><tr><td>installInfoName</td></tr><tr><td>macAppBundleName</td></tr><tr><td>macAppBundlePath</td></tr><tr><td>macPythonExe</td></tr><tr><td>modDir</td></tr><tr><td>platBinDir</td></tr><tr><td>platBinDirOld</td></tr><tr><td>progLanguages</td></tr><tr><td>progName</td></tr><tr><td>pyModDir</td></tr><tr><td>sourceDir</td></tr><tr><td>yes2All</td></tr>
 </table>
 <h3>Classes</h3>
 
--- a/eric6/i18n/eric6_cs.ts	Wed Dec 30 12:31:25 2020 +0100
+++ b/eric6/i18n/eric6_cs.ts	Wed Dec 30 13:45:26 2020 +0100
@@ -2443,63 +2443,68 @@
 <context>
     <name>CallStackViewer</name>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="48"/>
+        <location filename="../Debugger/CallStackViewer.py" line="59"/>
         <source>Show source</source>
         <translation type="unfinished">Zobrazit zdroj</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="50"/>
-        <source>Clear</source>
-        <translation type="unfinished">Vyčistit</translation>
-    </message>
-    <message>
-        <location filename="../Debugger/CallStackViewer.py" line="52"/>
-        <source>Save</source>
-        <translation type="unfinished">Uložit</translation>
-    </message>
-    <message>
-        <location filename="../Debugger/CallStackViewer.py" line="59"/>
-        <source>File: {0}
-Line: {1}
-{2}{3}</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../Debugger/CallStackViewer.py" line="61"/>
+        <source>Clear</source>
+        <translation type="unfinished">Vyčistit</translation>
+    </message>
+    <message>
+        <location filename="../Debugger/CallStackViewer.py" line="63"/>
+        <source>Save</source>
+        <translation type="unfinished">Uložit</translation>
+    </message>
+    <message>
+        <location filename="../Debugger/CallStackViewer.py" line="71"/>
+        <source>File: {0}
+Line: {1}
+{2}{3}</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Debugger/CallStackViewer.py" line="73"/>
         <source>File: {0}
 Line: {1}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="171"/>
+        <location filename="../Debugger/CallStackViewer.py" line="202"/>
         <source>Save Call Stack Info</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="157"/>
+        <location filename="../Debugger/CallStackViewer.py" line="188"/>
         <source>Text Files (*.txt);;All Files (*)</source>
         <translation type="unfinished">Textové soubory (*.txt);;Všechny soubory (*)</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="171"/>
+        <location filename="../Debugger/CallStackViewer.py" line="202"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
         <translation type="unfinished">&lt;p&gt;Soubor &lt;b&gt;{0}&lt;/b&gt; již existuje.&lt;/p&gt;&lt;p&gt;Má se přepsat?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="189"/>
+        <location filename="../Debugger/CallStackViewer.py" line="224"/>
         <source>Error saving Call Stack Info</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="189"/>
+        <location filename="../Debugger/CallStackViewer.py" line="224"/>
         <source>&lt;p&gt;The call stack info could not be written to &lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="45"/>
+        <location filename="../Debugger/CallStackViewer.py" line="56"/>
         <source>Call Stack</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../Debugger/CallStackViewer.py" line="213"/>
+        <source>Call Stack of &apos;{0}&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>CallTraceViewer</name>
@@ -2559,12 +2564,12 @@
         <translation type="unfinished">&lt;p&gt;Soubor &lt;b&gt;{0}&lt;/b&gt; již existuje.&lt;/p&gt;&lt;p&gt;Má se přepsat?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallTraceViewer.py" line="193"/>
+        <location filename="../Debugger/CallTraceViewer.py" line="197"/>
         <source>Error saving Call Trace Info</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/CallTraceViewer.py" line="193"/>
+        <location filename="../Debugger/CallTraceViewer.py" line="197"/>
         <source>&lt;p&gt;The call trace info could not be written to &lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2578,6 +2583,11 @@
         <source>Stop recording on exit</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../Debugger/CallTraceViewer.py" line="180"/>
+        <source>Call Trace Info of &apos;{0}&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>ChatWidget</name>
Binary file eric6/i18n/eric6_de.qm has changed
--- a/eric6/i18n/eric6_de.ts	Wed Dec 30 12:31:25 2020 +0100
+++ b/eric6/i18n/eric6_de.ts	Wed Dec 30 13:45:26 2020 +0100
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS><TS version="2.0" language="de" sourcelanguage="">
+<!DOCTYPE TS>
+<TS version="2.1" language="de">
 <context>
     <name>AboutDialog</name>
     <message>
@@ -2052,8 +2053,8 @@
     </message>
     <message>
         <location filename="../WebBrowser/Bookmarks/BookmarksMenu.py" line="170"/>
-        <source>Open in New Tab<byte value="x9"/>Ctrl+LMB</source>
-        <translation>In neuem Register öffnen<byte value="x9"/>Strg+LMK</translation>
+        <source>Open in New Tab	Ctrl+LMB</source>
+        <translation>In neuem Register öffnen	Strg+LMK</translation>
     </message>
     <message>
         <location filename="../WebBrowser/Bookmarks/BookmarksMenu.py" line="174"/>
@@ -2121,8 +2122,8 @@
     </message>
     <message>
         <location filename="../WebBrowser/Bookmarks/BookmarksToolBar.py" line="90"/>
-        <source>Open in New Tab<byte value="x9"/>Ctrl+LMB</source>
-        <translation>In neuem Register öffnen<byte value="x9"/>Strg+LMK</translation>
+        <source>Open in New Tab	Ctrl+LMB</source>
+        <translation>In neuem Register öffnen	Strg+LMK</translation>
     </message>
     <message>
         <location filename="../WebBrowser/Bookmarks/BookmarksToolBar.py" line="94"/>
@@ -2405,22 +2406,22 @@
 <context>
     <name>CallStackViewer</name>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="48"/>
+        <location filename="../Debugger/CallStackViewer.py" line="59"/>
         <source>Show source</source>
         <translation>Zeige Quelltext</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="50"/>
+        <location filename="../Debugger/CallStackViewer.py" line="61"/>
         <source>Clear</source>
         <translation>Löschen</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="52"/>
+        <location filename="../Debugger/CallStackViewer.py" line="63"/>
         <source>Save</source>
         <translation>Speichern</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="59"/>
+        <location filename="../Debugger/CallStackViewer.py" line="71"/>
         <source>File: {0}
 Line: {1}
 {2}{3}</source>
@@ -2429,42 +2430,47 @@
 {2}{3}</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="61"/>
+        <location filename="../Debugger/CallStackViewer.py" line="73"/>
         <source>File: {0}
 Line: {1}</source>
         <translation>Datei: {0}
 Zeile: {1}</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="171"/>
+        <location filename="../Debugger/CallStackViewer.py" line="202"/>
         <source>Save Call Stack Info</source>
         <translation>Aufrufhierarchie speichern</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="157"/>
+        <location filename="../Debugger/CallStackViewer.py" line="188"/>
         <source>Text Files (*.txt);;All Files (*)</source>
         <translation>Textdateien (*.txt);;Alle Dateien (*)</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="171"/>
+        <location filename="../Debugger/CallStackViewer.py" line="202"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
         <translation>&lt;p&gt;Die Datei &lt;b&gt;{0}&lt;/b&gt; existiert bereits. Überschreiben?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="189"/>
+        <location filename="../Debugger/CallStackViewer.py" line="224"/>
         <source>Error saving Call Stack Info</source>
         <translation>Fehler beim Speichern der Aufrufhierarchie</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="189"/>
+        <location filename="../Debugger/CallStackViewer.py" line="224"/>
         <source>&lt;p&gt;The call stack info could not be written to &lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Die Aufrufhierarchie konnten nicht nach &lt;b&gt;{0}&lt;/b&gt; geschrieben werden.&lt;/p&gt;&lt;p&gt;Ursache: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="45"/>
+        <location filename="../Debugger/CallStackViewer.py" line="56"/>
         <source>Call Stack</source>
         <translation>Aufrufhierarchie</translation>
     </message>
+    <message>
+        <location filename="../Debugger/CallStackViewer.py" line="213"/>
+        <source>Call Stack of &apos;{0}&apos;</source>
+        <translation>Aufrufhierarchie von &apos;{0}&apos;</translation>
+    </message>
 </context>
 <context>
     <name>CallTraceViewer</name>
@@ -2524,12 +2530,12 @@
         <translation>&lt;p&gt;Die Datei &lt;b&gt;{0}&lt;/b&gt; existiert bereits. Überschreiben?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallTraceViewer.py" line="193"/>
+        <location filename="../Debugger/CallTraceViewer.py" line="197"/>
         <source>Error saving Call Trace Info</source>
         <translation>Fehler beim Speichern der Aufrufinformation</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallTraceViewer.py" line="193"/>
+        <location filename="../Debugger/CallTraceViewer.py" line="197"/>
         <source>&lt;p&gt;The call trace info could not be written to &lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Die Aufrufinformationen konnten nicht nach &lt;b&gt;{0}&lt;/b&gt; geschrieben werden.&lt;/p&gt;&lt;p&gt;Ursache: {1}&lt;/p&gt;</translation>
     </message>
@@ -2543,6 +2549,11 @@
         <source>Stop recording on exit</source>
         <translation>Aufzeichnung beim Beenden stoppen</translation>
     </message>
+    <message>
+        <location filename="../Debugger/CallTraceViewer.py" line="180"/>
+        <source>Call Trace Info of &apos;{0}&apos;</source>
+        <translation>Aufrufinformation von &apos;{0}&apos;</translation>
+    </message>
 </context>
 <context>
     <name>ChatWidget</name>
@@ -44629,12 +44640,12 @@
     </message>
     <message>
         <location filename="../MicroPython/MicroPythonWidget.py" line="1050"/>
-        <source>&#xc2;&#xb5;Py Chart</source>
+        <source>µPy Chart</source>
         <translation>µPy Chart</translation>
     </message>
     <message>
         <location filename="../MicroPython/MicroPythonWidget.py" line="1130"/>
-        <source>&#xc2;&#xb5;Py Files</source>
+        <source>µPy Files</source>
         <translation>µPy Dateien</translation>
     </message>
     <message>
@@ -83767,8 +83778,8 @@
     </message>
     <message>
         <location filename="../WebBrowser/WebBrowserView.py" line="676"/>
-        <source>Open Link in New Tab<byte value="x9"/>Ctrl+LMB</source>
-        <translation>Link in neuem Fenster öffnen<byte value="x9"/>Strg+LMK</translation>
+        <source>Open Link in New Tab	Ctrl+LMB</source>
+        <translation>Link in neuem Fenster öffnen	Strg+LMK</translation>
     </message>
     <message>
         <location filename="../WebBrowser/WebBrowserView.py" line="682"/>
--- a/eric6/i18n/eric6_empty.ts	Wed Dec 30 12:31:25 2020 +0100
+++ b/eric6/i18n/eric6_empty.ts	Wed Dec 30 13:45:26 2020 +0100
@@ -2383,63 +2383,68 @@
 <context>
     <name>CallStackViewer</name>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="45"/>
+        <location filename="../Debugger/CallStackViewer.py" line="56"/>
         <source>Call Stack</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="48"/>
-        <source>Show source</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Debugger/CallStackViewer.py" line="50"/>
-        <source>Clear</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Debugger/CallStackViewer.py" line="52"/>
-        <source>Save</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../Debugger/CallStackViewer.py" line="59"/>
-        <source>File: {0}
-Line: {1}
-{2}{3}</source>
+        <source>Show source</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../Debugger/CallStackViewer.py" line="61"/>
+        <source>Clear</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Debugger/CallStackViewer.py" line="63"/>
+        <source>Save</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Debugger/CallStackViewer.py" line="71"/>
+        <source>File: {0}
+Line: {1}
+{2}{3}</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Debugger/CallStackViewer.py" line="73"/>
         <source>File: {0}
 Line: {1}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="171"/>
+        <location filename="../Debugger/CallStackViewer.py" line="202"/>
         <source>Save Call Stack Info</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="157"/>
+        <location filename="../Debugger/CallStackViewer.py" line="188"/>
         <source>Text Files (*.txt);;All Files (*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="171"/>
+        <location filename="../Debugger/CallStackViewer.py" line="202"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="189"/>
+        <location filename="../Debugger/CallStackViewer.py" line="224"/>
         <source>Error saving Call Stack Info</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="189"/>
+        <location filename="../Debugger/CallStackViewer.py" line="224"/>
         <source>&lt;p&gt;The call stack info could not be written to &lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../Debugger/CallStackViewer.py" line="213"/>
+        <source>Call Stack of &apos;{0}&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>CallTraceViewer</name>
@@ -2509,15 +2514,20 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/CallTraceViewer.py" line="193"/>
+        <location filename="../Debugger/CallTraceViewer.py" line="197"/>
         <source>Error saving Call Trace Info</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/CallTraceViewer.py" line="193"/>
+        <location filename="../Debugger/CallTraceViewer.py" line="197"/>
         <source>&lt;p&gt;The call trace info could not be written to &lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../Debugger/CallTraceViewer.py" line="180"/>
+        <source>Call Trace Info of &apos;{0}&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>ChatWidget</name>
--- a/eric6/i18n/eric6_en.ts	Wed Dec 30 12:31:25 2020 +0100
+++ b/eric6/i18n/eric6_en.ts	Wed Dec 30 13:45:26 2020 +0100
@@ -2383,63 +2383,68 @@
 <context>
     <name>CallStackViewer</name>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="48"/>
+        <location filename="../Debugger/CallStackViewer.py" line="59"/>
         <source>Show source</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="50"/>
-        <source>Clear</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Debugger/CallStackViewer.py" line="52"/>
-        <source>Save</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Debugger/CallStackViewer.py" line="59"/>
-        <source>File: {0}
-Line: {1}
-{2}{3}</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../Debugger/CallStackViewer.py" line="61"/>
+        <source>Clear</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Debugger/CallStackViewer.py" line="63"/>
+        <source>Save</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Debugger/CallStackViewer.py" line="71"/>
+        <source>File: {0}
+Line: {1}
+{2}{3}</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Debugger/CallStackViewer.py" line="73"/>
         <source>File: {0}
 Line: {1}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="171"/>
+        <location filename="../Debugger/CallStackViewer.py" line="202"/>
         <source>Save Call Stack Info</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="157"/>
+        <location filename="../Debugger/CallStackViewer.py" line="188"/>
         <source>Text Files (*.txt);;All Files (*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="171"/>
+        <location filename="../Debugger/CallStackViewer.py" line="202"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="189"/>
+        <location filename="../Debugger/CallStackViewer.py" line="224"/>
         <source>Error saving Call Stack Info</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="189"/>
+        <location filename="../Debugger/CallStackViewer.py" line="224"/>
         <source>&lt;p&gt;The call stack info could not be written to &lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="45"/>
+        <location filename="../Debugger/CallStackViewer.py" line="56"/>
         <source>Call Stack</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../Debugger/CallStackViewer.py" line="213"/>
+        <source>Call Stack of &apos;{0}&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>CallTraceViewer</name>
@@ -2499,12 +2504,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/CallTraceViewer.py" line="193"/>
+        <location filename="../Debugger/CallTraceViewer.py" line="197"/>
         <source>Error saving Call Trace Info</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/CallTraceViewer.py" line="193"/>
+        <location filename="../Debugger/CallTraceViewer.py" line="197"/>
         <source>&lt;p&gt;The call trace info could not be written to &lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2518,6 +2523,11 @@
         <source>Stop recording on exit</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../Debugger/CallTraceViewer.py" line="180"/>
+        <source>Call Trace Info of &apos;{0}&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>ChatWidget</name>
--- a/eric6/i18n/eric6_es.ts	Wed Dec 30 12:31:25 2020 +0100
+++ b/eric6/i18n/eric6_es.ts	Wed Dec 30 13:45:26 2020 +0100
@@ -2402,22 +2402,22 @@
 <context>
     <name>CallStackViewer</name>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="48"/>
+        <location filename="../Debugger/CallStackViewer.py" line="59"/>
         <source>Show source</source>
         <translation>Mostrar código fuente</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="50"/>
+        <location filename="../Debugger/CallStackViewer.py" line="61"/>
         <source>Clear</source>
         <translation>Limpiar</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="52"/>
+        <location filename="../Debugger/CallStackViewer.py" line="63"/>
         <source>Save</source>
         <translation>Guardar</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="59"/>
+        <location filename="../Debugger/CallStackViewer.py" line="71"/>
         <source>File: {0}
 Line: {1}
 {2}{3}</source>
@@ -2426,42 +2426,47 @@
 {2}{3}</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="61"/>
+        <location filename="../Debugger/CallStackViewer.py" line="73"/>
         <source>File: {0}
 Line: {1}</source>
         <translation>Archivo: {0}
 Línea: {1}</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="171"/>
+        <location filename="../Debugger/CallStackViewer.py" line="202"/>
         <source>Save Call Stack Info</source>
         <translation>Guardar Información de Pila de Llamadas</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="157"/>
+        <location filename="../Debugger/CallStackViewer.py" line="188"/>
         <source>Text Files (*.txt);;All Files (*)</source>
         <translation>Archivos de Texto (*.txt);;Todos los Archivos (*)</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="171"/>
+        <location filename="../Debugger/CallStackViewer.py" line="202"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
         <translation>&lt;p&gt;El archivo &lt;b&gt;{0}&lt;/b&gt; ya existe. ¿Desea sobreescribirlo?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="189"/>
+        <location filename="../Debugger/CallStackViewer.py" line="224"/>
         <source>Error saving Call Stack Info</source>
         <translation>Error al guardar Información de Pila de Llamadas</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="189"/>
+        <location filename="../Debugger/CallStackViewer.py" line="224"/>
         <source>&lt;p&gt;The call stack info could not be written to &lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation>&lt;p&gt;La información de la pila de llamadas no se ha podido guardar en &lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Razón: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="45"/>
+        <location filename="../Debugger/CallStackViewer.py" line="56"/>
         <source>Call Stack</source>
         <translation>Pila de Llamadas</translation>
     </message>
+    <message>
+        <location filename="../Debugger/CallStackViewer.py" line="213"/>
+        <source>Call Stack of &apos;{0}&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>CallTraceViewer</name>
@@ -2521,12 +2526,12 @@
         <translation>&lt;p&gt;El archivo &lt;b&gt;{0}&lt;/b&gt; ya existe. ¿Desea sobreescribirlo?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallTraceViewer.py" line="193"/>
+        <location filename="../Debugger/CallTraceViewer.py" line="197"/>
         <source>Error saving Call Trace Info</source>
         <translation>Error al guardar Información de Trazado de Llamadas</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallTraceViewer.py" line="193"/>
+        <location filename="../Debugger/CallTraceViewer.py" line="197"/>
         <source>&lt;p&gt;The call trace info could not be written to &lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation>&lt;p&gt;La información del trazado de llamadas no se ha podido guardar en &lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Razón: {1}&lt;/p&gt;</translation>
     </message>
@@ -2540,6 +2545,11 @@
         <source>Stop recording on exit</source>
         <translation>Detener grabación al salir</translation>
     </message>
+    <message>
+        <location filename="../Debugger/CallTraceViewer.py" line="180"/>
+        <source>Call Trace Info of &apos;{0}&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>ChatWidget</name>
--- a/eric6/i18n/eric6_fr.ts	Wed Dec 30 12:31:25 2020 +0100
+++ b/eric6/i18n/eric6_fr.ts	Wed Dec 30 13:45:26 2020 +0100
@@ -2466,22 +2466,22 @@
 <context>
     <name>CallStackViewer</name>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="48"/>
+        <location filename="../Debugger/CallStackViewer.py" line="59"/>
         <source>Show source</source>
         <translation>Afficher la source</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="50"/>
+        <location filename="../Debugger/CallStackViewer.py" line="61"/>
         <source>Clear</source>
         <translation>Effacer</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="52"/>
+        <location filename="../Debugger/CallStackViewer.py" line="63"/>
         <source>Save</source>
         <translation>Sauvegarder</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="59"/>
+        <location filename="../Debugger/CallStackViewer.py" line="71"/>
         <source>File: {0}
 Line: {1}
 {2}{3}</source>
@@ -2490,42 +2490,47 @@
 {2}{3}</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="61"/>
+        <location filename="../Debugger/CallStackViewer.py" line="73"/>
         <source>File: {0}
 Line: {1}</source>
         <translation>Fichier : {0}
 Ligne : {1}</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="171"/>
+        <location filename="../Debugger/CallStackViewer.py" line="202"/>
         <source>Save Call Stack Info</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="157"/>
+        <location filename="../Debugger/CallStackViewer.py" line="188"/>
         <source>Text Files (*.txt);;All Files (*)</source>
         <translation>Fichiers texte (*.txt);;Tous les fichiers (*)</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="171"/>
+        <location filename="../Debugger/CallStackViewer.py" line="202"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
         <translation>&lt;p&gt;Le fichier &lt;b&gt;{0}&lt;/b&gt;existe déjà. Écraser ?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="189"/>
+        <location filename="../Debugger/CallStackViewer.py" line="224"/>
         <source>Error saving Call Stack Info</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="189"/>
+        <location filename="../Debugger/CallStackViewer.py" line="224"/>
         <source>&lt;p&gt;The call stack info could not be written to &lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="45"/>
+        <location filename="../Debugger/CallStackViewer.py" line="56"/>
         <source>Call Stack</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../Debugger/CallStackViewer.py" line="213"/>
+        <source>Call Stack of &apos;{0}&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>CallTraceViewer</name>
@@ -2585,12 +2590,12 @@
         <translation>&lt;p&gt;Le fichier &lt;b&gt;{0}&lt;/b&gt;existe déjà. Écraser ?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallTraceViewer.py" line="193"/>
+        <location filename="../Debugger/CallTraceViewer.py" line="197"/>
         <source>Error saving Call Trace Info</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/CallTraceViewer.py" line="193"/>
+        <location filename="../Debugger/CallTraceViewer.py" line="197"/>
         <source>&lt;p&gt;The call trace info could not be written to &lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2604,6 +2609,11 @@
         <source>Stop recording on exit</source>
         <translation>Arrêter l&apos;enregistrement en quittant</translation>
     </message>
+    <message>
+        <location filename="../Debugger/CallTraceViewer.py" line="180"/>
+        <source>Call Trace Info of &apos;{0}&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>ChatWidget</name>
--- a/eric6/i18n/eric6_it.ts	Wed Dec 30 12:31:25 2020 +0100
+++ b/eric6/i18n/eric6_it.ts	Wed Dec 30 13:45:26 2020 +0100
@@ -2463,22 +2463,22 @@
 <context>
     <name>CallStackViewer</name>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="48"/>
+        <location filename="../Debugger/CallStackViewer.py" line="59"/>
         <source>Show source</source>
         <translation>Mostra sorgente</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="50"/>
+        <location filename="../Debugger/CallStackViewer.py" line="61"/>
         <source>Clear</source>
         <translation>Pulisci</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="52"/>
+        <location filename="../Debugger/CallStackViewer.py" line="63"/>
         <source>Save</source>
         <translation>Salva</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="59"/>
+        <location filename="../Debugger/CallStackViewer.py" line="71"/>
         <source>File: {0}
 Line: {1}
 {2}{3}</source>
@@ -2487,42 +2487,47 @@
 {2}{3}</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="61"/>
+        <location filename="../Debugger/CallStackViewer.py" line="73"/>
         <source>File: {0}
 Line: {1}</source>
         <translation>File: {0}
 riga: {1}</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="171"/>
+        <location filename="../Debugger/CallStackViewer.py" line="202"/>
         <source>Save Call Stack Info</source>
         <translation>Salva le informazioni della pila di chiamate</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="157"/>
+        <location filename="../Debugger/CallStackViewer.py" line="188"/>
         <source>Text Files (*.txt);;All Files (*)</source>
         <translation>File Testo(*.txt);;Tutti i file (*)</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="171"/>
+        <location filename="../Debugger/CallStackViewer.py" line="202"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
         <translation>&lt;p&gt;Il file &lt;b&gt;{0}&lt;/b&gt; esiste già. Sovrascriverlo ?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="189"/>
+        <location filename="../Debugger/CallStackViewer.py" line="224"/>
         <source>Error saving Call Stack Info</source>
         <translation>Errore salvando le informazioni della pila di chiamate</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="189"/>
+        <location filename="../Debugger/CallStackViewer.py" line="224"/>
         <source>&lt;p&gt;The call stack info could not be written to &lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Le informazioni della pila di chiamate non possono essere scritte su &lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Motivo: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="45"/>
+        <location filename="../Debugger/CallStackViewer.py" line="56"/>
         <source>Call Stack</source>
         <translation>Pila di chiamate</translation>
     </message>
+    <message>
+        <location filename="../Debugger/CallStackViewer.py" line="213"/>
+        <source>Call Stack of &apos;{0}&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>CallTraceViewer</name>
@@ -2582,12 +2587,12 @@
         <translation>&lt;p&gt;Il file &lt;b&gt;{0}&lt;/b&gt; esiste già. Sovrascriverlo ?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallTraceViewer.py" line="193"/>
+        <location filename="../Debugger/CallTraceViewer.py" line="197"/>
         <source>Error saving Call Trace Info</source>
         <translation>Errore salvando le informazioni del tracciamento chiamate</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallTraceViewer.py" line="193"/>
+        <location filename="../Debugger/CallTraceViewer.py" line="197"/>
         <source>&lt;p&gt;The call trace info could not be written to &lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Le informazioni del tracciamento chiamate non possono essere scritte su &lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Motivo: {1}&lt;/p&gt;</translation>
     </message>
@@ -2601,6 +2606,11 @@
         <source>Stop recording on exit</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../Debugger/CallTraceViewer.py" line="180"/>
+        <source>Call Trace Info of &apos;{0}&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>ChatWidget</name>
--- a/eric6/i18n/eric6_pt.ts	Wed Dec 30 12:31:25 2020 +0100
+++ b/eric6/i18n/eric6_pt.ts	Wed Dec 30 13:45:26 2020 +0100
@@ -2465,22 +2465,22 @@
 <context>
     <name>CallStackViewer</name>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="48"/>
+        <location filename="../Debugger/CallStackViewer.py" line="59"/>
         <source>Show source</source>
         <translation>Mostrar fonte</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="50"/>
+        <location filename="../Debugger/CallStackViewer.py" line="61"/>
         <source>Clear</source>
         <translation>Limpar</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="52"/>
+        <location filename="../Debugger/CallStackViewer.py" line="63"/>
         <source>Save</source>
         <translation>Gravar</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="59"/>
+        <location filename="../Debugger/CallStackViewer.py" line="71"/>
         <source>File: {0}
 Line: {1}
 {2}{3}</source>
@@ -2489,42 +2489,47 @@
 {2}{3}</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="61"/>
+        <location filename="../Debugger/CallStackViewer.py" line="73"/>
         <source>File: {0}
 Line: {1}</source>
         <translation>Ficheiro: {0}
 Linha: {1}</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="171"/>
+        <location filename="../Debugger/CallStackViewer.py" line="202"/>
         <source>Save Call Stack Info</source>
         <translation>Gravar Informação da Pilha de Chamadas</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="157"/>
+        <location filename="../Debugger/CallStackViewer.py" line="188"/>
         <source>Text Files (*.txt);;All Files (*)</source>
         <translation>Ficheiros de Texto (*.txt);;Ficheiros Todos (*)</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="171"/>
+        <location filename="../Debugger/CallStackViewer.py" line="202"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
         <translation>&lt;p&gt;O ficheiro &lt;b&gt;{0}&lt;/b&gt; já existe. Sobreescrever?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="189"/>
+        <location filename="../Debugger/CallStackViewer.py" line="224"/>
         <source>Error saving Call Stack Info</source>
         <translation>Erro ao gravar a Informação da Pilha de Chamadas</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="189"/>
+        <location filename="../Debugger/CallStackViewer.py" line="224"/>
         <source>&lt;p&gt;The call stack info could not be written to &lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation>&lt;p&gt;A informação da pilha de chamadas não se pôde escrever em &lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Razão: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="45"/>
+        <location filename="../Debugger/CallStackViewer.py" line="56"/>
         <source>Call Stack</source>
         <translation>Pilha de Chamadas</translation>
     </message>
+    <message>
+        <location filename="../Debugger/CallStackViewer.py" line="213"/>
+        <source>Call Stack of &apos;{0}&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>CallTraceViewer</name>
@@ -2584,12 +2589,12 @@
         <translation>&lt;p&gt;O ficheiro &lt;b&gt;{0}&lt;/b&gt; já existe. Sobreescrever?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallTraceViewer.py" line="193"/>
+        <location filename="../Debugger/CallTraceViewer.py" line="197"/>
         <source>Error saving Call Trace Info</source>
         <translation>Erro ao gravar Informação de Rastreio de Chamadas</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallTraceViewer.py" line="193"/>
+        <location filename="../Debugger/CallTraceViewer.py" line="197"/>
         <source>&lt;p&gt;The call trace info could not be written to &lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation>&lt;p&gt;A informação de rastreio de chamadas não se pôde escrever em {0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Razão: {1}&lt;/p&gt;</translation>
     </message>
@@ -2603,6 +2608,11 @@
         <source>Stop recording on exit</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../Debugger/CallTraceViewer.py" line="180"/>
+        <source>Call Trace Info of &apos;{0}&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>ChatWidget</name>
--- a/eric6/i18n/eric6_ru.ts	Wed Dec 30 12:31:25 2020 +0100
+++ b/eric6/i18n/eric6_ru.ts	Wed Dec 30 13:45:26 2020 +0100
@@ -2404,22 +2404,22 @@
 <context>
     <name>CallStackViewer</name>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="48"/>
+        <location filename="../Debugger/CallStackViewer.py" line="59"/>
         <source>Show source</source>
         <translation>Показать исходник</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="50"/>
+        <location filename="../Debugger/CallStackViewer.py" line="61"/>
         <source>Clear</source>
         <translation>Очистить</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="52"/>
+        <location filename="../Debugger/CallStackViewer.py" line="63"/>
         <source>Save</source>
         <translation>Сохранить</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="59"/>
+        <location filename="../Debugger/CallStackViewer.py" line="71"/>
         <source>File: {0}
 Line: {1}
 {2}{3}</source>
@@ -2428,42 +2428,47 @@
 {2}{3}</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="61"/>
+        <location filename="../Debugger/CallStackViewer.py" line="73"/>
         <source>File: {0}
 Line: {1}</source>
         <translation>Файл: {0}
 Строка: {1}</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="171"/>
+        <location filename="../Debugger/CallStackViewer.py" line="202"/>
         <source>Save Call Stack Info</source>
         <translation>Сохранить стек вызовов</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="157"/>
+        <location filename="../Debugger/CallStackViewer.py" line="188"/>
         <source>Text Files (*.txt);;All Files (*)</source>
         <translation>Текстовые файлы (*.txt);;Все файлы (*)</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="171"/>
+        <location filename="../Debugger/CallStackViewer.py" line="202"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
         <translation>&lt;p&gt;Файл &lt;b&gt;{0}&lt;/b&gt; уже существует. Переписать?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="189"/>
+        <location filename="../Debugger/CallStackViewer.py" line="224"/>
         <source>Error saving Call Stack Info</source>
         <translation>Ошибка при сохранении стека вызовов</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="189"/>
+        <location filename="../Debugger/CallStackViewer.py" line="224"/>
         <source>&lt;p&gt;The call stack info could not be written to &lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Стек вызовов не записан в&lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Причина: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="45"/>
+        <location filename="../Debugger/CallStackViewer.py" line="56"/>
         <source>Call Stack</source>
         <translation>Стек вызовов</translation>
     </message>
+    <message>
+        <location filename="../Debugger/CallStackViewer.py" line="213"/>
+        <source>Call Stack of &apos;{0}&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>CallTraceViewer</name>
@@ -2523,12 +2528,12 @@
         <translation>&lt;p&gt;Файл &lt;b&gt;{0}&lt;/b&gt; уже существует. Переписать?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallTraceViewer.py" line="193"/>
+        <location filename="../Debugger/CallTraceViewer.py" line="197"/>
         <source>Error saving Call Trace Info</source>
         <translation>Ошибка при сохранении информации о трассировке вызовов</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallTraceViewer.py" line="193"/>
+        <location filename="../Debugger/CallTraceViewer.py" line="197"/>
         <source>&lt;p&gt;The call trace info could not be written to &lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Информация о трассировке вызовов не может быть записана в &lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Причина: {1}.&lt;/p&gt;</translation>
     </message>
@@ -2542,6 +2547,11 @@
         <source>Stop recording on exit</source>
         <translation>Останавливать запись при выходе</translation>
     </message>
+    <message>
+        <location filename="../Debugger/CallTraceViewer.py" line="180"/>
+        <source>Call Trace Info of &apos;{0}&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>ChatWidget</name>
--- a/eric6/i18n/eric6_tr.ts	Wed Dec 30 12:31:25 2020 +0100
+++ b/eric6/i18n/eric6_tr.ts	Wed Dec 30 13:45:26 2020 +0100
@@ -2442,63 +2442,68 @@
 <context>
     <name>CallStackViewer</name>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="48"/>
+        <location filename="../Debugger/CallStackViewer.py" line="59"/>
         <source>Show source</source>
         <translation type="unfinished">Kaynağı göster</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="50"/>
-        <source>Clear</source>
-        <translation type="unfinished">Temizle</translation>
-    </message>
-    <message>
-        <location filename="../Debugger/CallStackViewer.py" line="52"/>
-        <source>Save</source>
-        <translation type="unfinished">Kaydet</translation>
-    </message>
-    <message>
-        <location filename="../Debugger/CallStackViewer.py" line="59"/>
-        <source>File: {0}
-Line: {1}
-{2}{3}</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../Debugger/CallStackViewer.py" line="61"/>
+        <source>Clear</source>
+        <translation type="unfinished">Temizle</translation>
+    </message>
+    <message>
+        <location filename="../Debugger/CallStackViewer.py" line="63"/>
+        <source>Save</source>
+        <translation type="unfinished">Kaydet</translation>
+    </message>
+    <message>
+        <location filename="../Debugger/CallStackViewer.py" line="71"/>
+        <source>File: {0}
+Line: {1}
+{2}{3}</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Debugger/CallStackViewer.py" line="73"/>
         <source>File: {0}
 Line: {1}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="171"/>
+        <location filename="../Debugger/CallStackViewer.py" line="202"/>
         <source>Save Call Stack Info</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="157"/>
+        <location filename="../Debugger/CallStackViewer.py" line="188"/>
         <source>Text Files (*.txt);;All Files (*)</source>
         <translation type="unfinished">Metin Dosyaları (*.txt);;Tüm Dosyalar (*)</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="171"/>
+        <location filename="../Debugger/CallStackViewer.py" line="202"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
         <translation type="unfinished">&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; dosyası halen mevcut. Üzerine yazılsın mı?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="189"/>
+        <location filename="../Debugger/CallStackViewer.py" line="224"/>
         <source>Error saving Call Stack Info</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="189"/>
+        <location filename="../Debugger/CallStackViewer.py" line="224"/>
         <source>&lt;p&gt;The call stack info could not be written to &lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="45"/>
+        <location filename="../Debugger/CallStackViewer.py" line="56"/>
         <source>Call Stack</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../Debugger/CallStackViewer.py" line="213"/>
+        <source>Call Stack of &apos;{0}&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>CallTraceViewer</name>
@@ -2558,12 +2563,12 @@
         <translation type="unfinished">&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; dosyası halen mevcut. Üzerine yazılsın mı?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallTraceViewer.py" line="193"/>
+        <location filename="../Debugger/CallTraceViewer.py" line="197"/>
         <source>Error saving Call Trace Info</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/CallTraceViewer.py" line="193"/>
+        <location filename="../Debugger/CallTraceViewer.py" line="197"/>
         <source>&lt;p&gt;The call trace info could not be written to &lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2577,6 +2582,11 @@
         <source>Stop recording on exit</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../Debugger/CallTraceViewer.py" line="180"/>
+        <source>Call Trace Info of &apos;{0}&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>ChatWidget</name>
--- a/eric6/i18n/eric6_zh_CN.ts	Wed Dec 30 12:31:25 2020 +0100
+++ b/eric6/i18n/eric6_zh_CN.ts	Wed Dec 30 13:45:26 2020 +0100
@@ -2458,22 +2458,22 @@
 <context>
     <name>CallStackViewer</name>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="48"/>
+        <location filename="../Debugger/CallStackViewer.py" line="59"/>
         <source>Show source</source>
         <translation>显示源代码</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="50"/>
+        <location filename="../Debugger/CallStackViewer.py" line="61"/>
         <source>Clear</source>
         <translation>清除</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="52"/>
+        <location filename="../Debugger/CallStackViewer.py" line="63"/>
         <source>Save</source>
         <translation>保存</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="59"/>
+        <location filename="../Debugger/CallStackViewer.py" line="71"/>
         <source>File: {0}
 Line: {1}
 {2}{3}</source>
@@ -2482,42 +2482,47 @@
 {2}{3}</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="61"/>
+        <location filename="../Debugger/CallStackViewer.py" line="73"/>
         <source>File: {0}
 Line: {1}</source>
         <translation>文件: {0}
 行: {1}</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="171"/>
+        <location filename="../Debugger/CallStackViewer.py" line="202"/>
         <source>Save Call Stack Info</source>
         <translation>保存调用堆栈信息</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="157"/>
+        <location filename="../Debugger/CallStackViewer.py" line="188"/>
         <source>Text Files (*.txt);;All Files (*)</source>
         <translation>文本文件 (*.txt);;所有文件 (*)</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="171"/>
+        <location filename="../Debugger/CallStackViewer.py" line="202"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
         <translation>&lt;p&gt;文件 &lt;b&gt;{0}&lt;/b&gt; 已经存在。是否覆盖?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="189"/>
+        <location filename="../Debugger/CallStackViewer.py" line="224"/>
         <source>Error saving Call Stack Info</source>
         <translation>保存调用堆栈信息错误</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="189"/>
+        <location filename="../Debugger/CallStackViewer.py" line="224"/>
         <source>&lt;p&gt;The call stack info could not be written to &lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation>调用堆栈信息不能写入到 &lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;原因: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallStackViewer.py" line="45"/>
+        <location filename="../Debugger/CallStackViewer.py" line="56"/>
         <source>Call Stack</source>
         <translation>调用堆栈</translation>
     </message>
+    <message>
+        <location filename="../Debugger/CallStackViewer.py" line="213"/>
+        <source>Call Stack of &apos;{0}&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>CallTraceViewer</name>
@@ -2577,12 +2582,12 @@
         <translation>&lt;p&gt;文件 &lt;b&gt;{0}&lt;/b&gt; 已经存在。是否覆盖?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallTraceViewer.py" line="193"/>
+        <location filename="../Debugger/CallTraceViewer.py" line="197"/>
         <source>Error saving Call Trace Info</source>
         <translation>保存调用跟踪信息时出错</translation>
     </message>
     <message>
-        <location filename="../Debugger/CallTraceViewer.py" line="193"/>
+        <location filename="../Debugger/CallTraceViewer.py" line="197"/>
         <source>&lt;p&gt;The call trace info could not be written to &lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation>&lt;p&gt;调用跟踪信息不能写入到 &lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;原因: {1}&lt;/p&gt;</translation>
     </message>
@@ -2596,6 +2601,11 @@
         <source>Stop recording on exit</source>
         <translation>退出时停止记录</translation>
     </message>
+    <message>
+        <location filename="../Debugger/CallTraceViewer.py" line="180"/>
+        <source>Call Trace Info of &apos;{0}&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>ChatWidget</name>

eric ide

mercurial