diff --git a/src/plugins/debugger/debuggeractions.cpp b/src/plugins/debugger/debuggeractions.cpp
index feeb7b4445aac8c4b02e09fc68cad8e97d55227d..f462261d96751df26730f56f486d0af9a2d947c5 100644
--- a/src/plugins/debugger/debuggeractions.cpp
+++ b/src/plugins/debugger/debuggeractions.cpp
@@ -444,6 +444,10 @@ DebuggerSettings *DebuggerSettings::instance()
     item->setText(tr("Reload Full Stack"));
     instance->insertItem(ExpandStack, item);
 
+    item = new SavedAction(instance);
+    item->setText(tr("Create Full Backtrace"));
+    instance->insertItem(CreateFullBacktrace, item);
+
     item = new SavedAction(instance);
     item->setText(tr("Execute Line"));
     instance->insertItem(ExecuteCommand, item);
diff --git a/src/plugins/debugger/debuggeractions.h b/src/plugins/debugger/debuggeractions.h
index 66f762cade384699b7f10e29739629be3ec3c7f9..e1b4f87abab7db9ceba59cb29b446006c9e74f62 100644
--- a/src/plugins/debugger/debuggeractions.h
+++ b/src/plugins/debugger/debuggeractions.h
@@ -112,6 +112,7 @@ enum DebuggerActionCode
     // Stack
     MaximalStackDepth,
     ExpandStack,
+    CreateFullBacktrace,
 
     // Watchers & Locals
     WatchExpression,
diff --git a/src/plugins/debugger/debuggerconstants.h b/src/plugins/debugger/debuggerconstants.h
index 3482de3dc059543a7925b6828fc4e8bde7a82a74..cfd55b915cb1d6d03b3012c2a10141d1f85c651a 100644
--- a/src/plugins/debugger/debuggerconstants.h
+++ b/src/plugins/debugger/debuggerconstants.h
@@ -129,6 +129,7 @@ enum DebuggerCapabilities
     ReloadModuleSymbolsCapability = 0x100,
     BreakOnThrowAndCatchCapability = 0x200,
     ReturnFromFunctionCapability = 0x400,
+    CreateFullBacktraceCapability = 0x800,
 };
 
 enum LogChannel
diff --git a/src/plugins/debugger/debuggermanager.cpp b/src/plugins/debugger/debuggermanager.cpp
index ee7d2ef52601fc7e88ba511ea1dcbb242950850a..bde5f76ac25be46cda036a0cc521b400d2033515 100644
--- a/src/plugins/debugger/debuggermanager.cpp
+++ b/src/plugins/debugger/debuggermanager.cpp
@@ -1947,6 +1947,12 @@ void DebuggerManager::updateWatchersWindow()
         d->m_watchHandler->model(WatchersWatch)->rowCount(QModelIndex()) > 0);
 }
 
+void DebuggerManager::openTextEditor(const QString &titlePattern,
+    const QString &contents)
+{
+    d->m_plugin->openTextEditor(titlePattern, contents);
+}
+
 //////////////////////////////////////////////////////////////////////
 //
 // AbstractDebuggerEngine
diff --git a/src/plugins/debugger/debuggermanager.h b/src/plugins/debugger/debuggermanager.h
index 87e23361ba9e8fe007d49144fb847654e682baa5..992903d94cf48a6fd8af226c26fcbff4a268e676 100644
--- a/src/plugins/debugger/debuggermanager.h
+++ b/src/plugins/debugger/debuggermanager.h
@@ -345,6 +345,8 @@ private:
     Internal::BreakpointData *findBreakpoint(const QString &fileName, int lineNumber);
     void setToolTipExpression(const QPoint &mousePos,
         TextEditor::ITextEditor *editor, int cursorPos);
+    void openTextEditor(const QString &titlePattern,
+        const QString &contents);
 
     DebuggerManagerPrivate *d;
 };
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index 3c1ffdfbb3a2431c38d1eeefce0de62177b93aba..0dc8aa0d619dc98ffdd4179d0df05d9790e7b4db 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -1233,6 +1233,18 @@ void DebuggerPlugin::gotoLocation(const QString &file, int line, bool setMarker)
     }
 }
 
+void DebuggerPlugin::openTextEditor(const QString &titlePattern0,
+    const QString &contents)
+{
+    QString titlePattern = titlePattern0;
+    EditorManager *editorManager = EditorManager::instance();
+    QTC_ASSERT(editorManager, return);
+    Core::IEditor *editor = editorManager->openEditorWithContents(
+        Core::Constants::K_DEFAULT_TEXT_EDITOR_ID, &titlePattern, contents);
+    QTC_ASSERT(editor, return);
+    editorManager->activateEditor(editor);
+}
+
 void DebuggerPlugin::handleStateChanged(int state)
 {
     // Prevent it from beeing triggered on setup.
diff --git a/src/plugins/debugger/debuggerplugin.h b/src/plugins/debugger/debuggerplugin.h
index 9894f25e966f28e969c7ebef1b366a172f4217a2..061a7a60e5a8fe68007df30b630d5399f83a2e1e 100644
--- a/src/plugins/debugger/debuggerplugin.h
+++ b/src/plugins/debugger/debuggerplugin.h
@@ -107,6 +107,8 @@ private slots:
     void resetLocation();
     void gotoLocation(const QString &file, int line, bool setMarker);
 
+    void openTextEditor(const QString &titlePattern, const QString &contents);
+
     void breakpointSetRemoveMarginActionTriggered();
     void breakpointEnableDisableMarginActionTriggered();
     void onModeChanged(Core::IMode *mode);
diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index 965b8385a5a14188c08a279e19609873728fc972..aa5b5afe7e9bea0bdb14e428b9036e99125c6786 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -188,6 +188,8 @@ GdbEngine::GdbEngine(DebuggerManager *manager) : IDebuggerEngine(manager)
 
     connect(theDebuggerAction(AutoDerefPointers), SIGNAL(valueChanged(QVariant)),
             this, SLOT(setAutoDerefPointers(QVariant)));
+    connect(theDebuggerAction(CreateFullBacktrace), SIGNAL(triggered()),
+            this, SLOT(createFullBacktrace()));
 }
 
 void GdbEngine::connectDebuggingHelperActions()
@@ -1795,7 +1797,8 @@ unsigned GdbEngine::debuggerCapabilities() const
         | RegisterCapability | ShowMemoryCapability
         | JumpToLineCapability | ReloadModuleCapability
         | ReloadModuleSymbolsCapability | BreakOnThrowAndCatchCapability
-        | ReturnFromFunctionCapability;
+        | ReturnFromFunctionCapability 
+        | CreateFullBacktraceCapability;
 }
 
 void GdbEngine::continueInferiorInternal()
@@ -4350,6 +4353,20 @@ bool GdbEngine::hasPython() const
     return m_hasPython;
 }
 
+void GdbEngine::createFullBacktrace()
+{
+    postCommand("thread apply all bt", NeedsStop, CB(handleCreateFullBacktrace));
+}
+
+void GdbEngine::handleCreateFullBacktrace(const GdbResponse &response)
+{
+    if (response.resultClass == GdbResultDone) {
+        m_manager->openTextEditor(_("Backtrace $"),
+            _(response.data.findChild("consolestreamoutput").data()));
+    }
+}
+
+
 //
 // Factory
 //
diff --git a/src/plugins/debugger/gdb/gdbengine.h b/src/plugins/debugger/gdb/gdbengine.h
index f0216a5e8f314b940e06c983a648bbb4d403aaeb..dba14acdf001eed28b9f68eac15668c9f27dca3b 100644
--- a/src/plugins/debugger/gdb/gdbengine.h
+++ b/src/plugins/debugger/gdb/gdbengine.h
@@ -479,6 +479,9 @@ private: ////////// View & Data Stuff //////////
     void handleDebuggingHelperEditValue(const GdbResponse &response);
     void handleDebuggingHelperSetup(const GdbResponse &response);
 
+    Q_SLOT void createFullBacktrace();
+    void handleCreateFullBacktrace(const GdbResponse &response);
+
     void updateLocals(const QVariant &cookie = QVariant());
         void updateLocalsClassic(const QVariant &cookie);
         void updateLocalsPython(const QByteArray &varList);
diff --git a/src/plugins/debugger/stackwindow.cpp b/src/plugins/debugger/stackwindow.cpp
index 0d262588438e4f046632b04318cce433923b8e3a..b1b54277a80962961c96c0a52cda67f6fb9ea05c 100644
--- a/src/plugins/debugger/stackwindow.cpp
+++ b/src/plugins/debugger/stackwindow.cpp
@@ -102,12 +102,14 @@ void StackWindow::contextMenuEvent(QContextMenuEvent *ev)
     const unsigned engineCapabilities = m_manager->debuggerCapabilities();
     menu.addAction(theDebuggerAction(ExpandStack));
 
-    QAction *actCopyContents = menu.addAction(tr("Copy contents to clipboard"));
+    QAction *actCopyContents = menu.addAction(tr("Copy Contents to Clipboard"));
     actCopyContents->setEnabled(model() != 0);
 
+    menu.addAction(theDebuggerAction(CreateFullBacktrace));
+
     QAction *actShowMemory = menu.addAction(QString());
     if (address.isEmpty()) {
-        actShowMemory->setText(tr("Open memory editor"));
+        actShowMemory->setText(tr("Open Memory Editor"));
         actShowMemory->setEnabled(false);
     } else {
         actShowMemory->setText(tr("Open Memory Editor at %1").arg(address));