diff --git a/src/plugins/debugger/debuggeroutputwindow.cpp b/src/plugins/debugger/debuggeroutputwindow.cpp
index c75fbd5a3283ec43d9c296d7dd1dd226626db83b..cbca456c8e7e1727eebf102e698fd46afbb13ced 100644
--- a/src/plugins/debugger/debuggeroutputwindow.cpp
+++ b/src/plugins/debugger/debuggeroutputwindow.cpp
@@ -341,6 +341,10 @@ void DebuggerOutputWindow::showOutput(int channel, const QString &output)
 {
     if (output.isEmpty())
         return;
+    QTextCursor oldCursor = m_combinedText->textCursor();
+    QTextCursor cursor = oldCursor;
+    cursor.movePosition(QTextCursor::End);
+    bool atEnd = oldCursor.position() == cursor.position();
     foreach (QString line, output.split('\n')) {
         // FIXME: QTextEdit asserts on really long lines...
         const int n = 30000;
@@ -349,10 +353,11 @@ void DebuggerOutputWindow::showOutput(int channel, const QString &output)
         if (line != QLatin1String("(gdb) "))
             m_combinedText->appendPlainText(charForChannel(channel) + line);
     }
-    QTextCursor cursor = m_combinedText->textCursor();
     cursor.movePosition(QTextCursor::End);
-    m_combinedText->setTextCursor(cursor);
-    m_combinedText->ensureCursorVisible();
+    if (atEnd) {
+        m_combinedText->setTextCursor(cursor);
+        m_combinedText->ensureCursorVisible();
+    }
 }
 
 void DebuggerOutputWindow::showInput(int channel, const QString &input)