| 
									
										
										
										
											2009-02-25 09:15:00 +01:00
										 |  |  | /**************************************************************************
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | ** | 
					
						
							|  |  |  | ** This file is part of Qt Creator | 
					
						
							|  |  |  | ** | 
					
						
							| 
									
										
										
										
											2009-02-25 09:15:00 +01:00
										 |  |  | ** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | ** | 
					
						
							|  |  |  | ** Contact:  Qt Software Information (qt-info@nokia.com) | 
					
						
							|  |  |  | ** | 
					
						
							| 
									
										
										
										
											2009-02-25 09:15:00 +01:00
										 |  |  | ** Commercial Usage | 
					
						
							| 
									
										
										
										
											2008-12-02 14:17:16 +01:00
										 |  |  | ** | 
					
						
							| 
									
										
										
										
											2009-02-25 09:15:00 +01:00
										 |  |  | ** Licensees holding valid Qt Commercial licenses may use this file in | 
					
						
							|  |  |  | ** accordance with the Qt Commercial License Agreement provided with the | 
					
						
							|  |  |  | ** Software or, alternatively, in accordance with the terms contained in | 
					
						
							|  |  |  | ** a written agreement between you and Nokia. | 
					
						
							| 
									
										
										
										
											2008-12-02 14:17:16 +01:00
										 |  |  | ** | 
					
						
							| 
									
										
										
										
											2009-02-25 09:15:00 +01:00
										 |  |  | ** GNU Lesser General Public License Usage | 
					
						
							| 
									
										
										
										
											2008-12-02 14:17:16 +01:00
										 |  |  | ** | 
					
						
							| 
									
										
										
										
											2009-02-25 09:15:00 +01:00
										 |  |  | ** Alternatively, this file may be used under the terms of the GNU Lesser | 
					
						
							|  |  |  | ** General Public License version 2.1 as published by the Free Software | 
					
						
							|  |  |  | ** Foundation and appearing in the file LICENSE.LGPL included in the | 
					
						
							|  |  |  | ** packaging of this file.  Please review the following information to | 
					
						
							|  |  |  | ** ensure the GNU Lesser General Public License version 2.1 requirements | 
					
						
							|  |  |  | ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
 | 
					
						
							| 
									
										
										
										
											2008-12-02 14:17:16 +01:00
										 |  |  | ** | 
					
						
							| 
									
										
										
										
											2009-02-25 09:15:00 +01:00
										 |  |  | ** If you are unsure which license is appropriate for your use, please | 
					
						
							|  |  |  | ** contact the sales department at qt-sales@nokia.com. | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | ** | 
					
						
							| 
									
										
										
										
											2009-02-25 09:15:00 +01:00
										 |  |  | **************************************************************************/ | 
					
						
							| 
									
										
										
										
											2008-12-02 15:08:31 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | #include "debuggerplugin.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-17 17:00:06 +01:00
										 |  |  | #include "debuggeractions.h"
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | #include "debuggerconstants.h"
 | 
					
						
							|  |  |  | #include "debuggermanager.h"
 | 
					
						
							|  |  |  | #include "debuggerrunner.h"
 | 
					
						
							|  |  |  | #include "gdbengine.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-14 18:09:02 +01:00
										 |  |  | #include "ui_gdboptionpage.h"
 | 
					
						
							| 
									
										
										
										
											2009-03-23 12:28:02 +01:00
										 |  |  | #include "ui_dumperoptionpage.h"
 | 
					
						
							| 
									
										
										
										
											2009-01-14 18:09:02 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-13 13:39:31 +01:00
										 |  |  | #include <coreplugin/actionmanager/actionmanager.h>
 | 
					
						
							| 
									
										
										
										
											2009-01-13 18:15:24 +01:00
										 |  |  | #include <coreplugin/basemode.h>
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | #include <coreplugin/coreconstants.h>
 | 
					
						
							| 
									
										
										
										
											2009-01-14 18:09:02 +01:00
										 |  |  | #include <coreplugin/dialogs/ioptionspage.h>
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | #include <coreplugin/editormanager/editormanager.h>
 | 
					
						
							| 
									
										
										
										
											2009-01-13 18:15:24 +01:00
										 |  |  | #include <coreplugin/findplaceholder.h>
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | #include <coreplugin/icore.h>
 | 
					
						
							|  |  |  | #include <coreplugin/messagemanager.h>
 | 
					
						
							| 
									
										
										
										
											2009-01-13 18:15:24 +01:00
										 |  |  | #include <coreplugin/minisplitter.h>
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | #include <coreplugin/modemanager.h>
 | 
					
						
							| 
									
										
										
										
											2009-01-13 18:15:24 +01:00
										 |  |  | #include <coreplugin/navigationwidget.h>
 | 
					
						
							|  |  |  | #include <coreplugin/outputpane.h>
 | 
					
						
							|  |  |  | #include <coreplugin/rightpane.h>
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | #include <coreplugin/uniqueidmanager.h>
 | 
					
						
							| 
									
										
										
										
											2008-12-09 16:18:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | #include <cplusplus/ExpressionUnderCursor.h>
 | 
					
						
							| 
									
										
										
										
											2008-12-09 16:18:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | #include <cppeditor/cppeditorconstants.h>
 | 
					
						
							| 
									
										
										
										
											2008-12-09 16:18:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-20 11:52:04 +01:00
										 |  |  | #include <extensionsystem/pluginmanager.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-28 14:29:54 +01:00
										 |  |  | #include <projectexplorer/projectexplorer.h>
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | #include <projectexplorer/projectexplorerconstants.h>
 | 
					
						
							|  |  |  | #include <projectexplorer/session.h>
 | 
					
						
							| 
									
										
										
										
											2008-12-09 16:18:28 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | #include <texteditor/basetexteditor.h>
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | #include <texteditor/basetextmark.h>
 | 
					
						
							|  |  |  | #include <texteditor/itexteditor.h>
 | 
					
						
							|  |  |  | #include <texteditor/texteditorconstants.h>
 | 
					
						
							| 
									
										
										
										
											2008-12-09 16:18:28 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | #include <utils/qtcassert.h>
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | #include <QtCore/QDebug>
 | 
					
						
							|  |  |  | #include <QtCore/QObject>
 | 
					
						
							|  |  |  | #include <QtCore/QPoint>
 | 
					
						
							|  |  |  | #include <QtCore/QSettings>
 | 
					
						
							| 
									
										
										
										
											2009-01-05 12:54:52 +01:00
										 |  |  | #include <QtCore/QtPlugin>
 | 
					
						
							| 
									
										
										
										
											2008-12-09 16:18:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-14 18:09:02 +01:00
										 |  |  | #include <QtGui/QLineEdit>
 | 
					
						
							| 
									
										
										
										
											2009-01-13 17:41:23 +01:00
										 |  |  | #include <QtGui/QDockWidget>
 | 
					
						
							| 
									
										
										
										
											2009-01-13 18:15:24 +01:00
										 |  |  | #include <QtGui/QMainWindow>
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | #include <QtGui/QPlainTextEdit>
 | 
					
						
							|  |  |  | #include <QtGui/QTextBlock>
 | 
					
						
							|  |  |  | #include <QtGui/QTextCursor>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | using namespace Core; | 
					
						
							| 
									
										
										
										
											2009-01-13 18:15:24 +01:00
										 |  |  | using namespace Debugger::Constants; | 
					
						
							|  |  |  | using namespace Debugger::Internal; | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | using namespace ProjectExplorer; | 
					
						
							| 
									
										
										
										
											2009-01-13 18:15:24 +01:00
										 |  |  | using namespace TextEditor; | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace Debugger { | 
					
						
							|  |  |  | namespace Constants { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const char * const STARTEXTERNAL        = "Debugger.StartExternal"; | 
					
						
							|  |  |  | const char * const ATTACHEXTERNAL       = "Debugger.AttachExternal"; | 
					
						
							| 
									
										
										
										
											2009-03-02 15:14:12 +01:00
										 |  |  | const char * const ATTACHCORE           = "Debugger.AttachCore"; | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | const char * const RUN_TO_LINE          = "Debugger.RunToLine"; | 
					
						
							|  |  |  | const char * const RUN_TO_FUNCTION      = "Debugger.RunToFunction"; | 
					
						
							|  |  |  | const char * const JUMP_TO_LINE         = "Debugger.JumpToLine"; | 
					
						
							|  |  |  | const char * const TOGGLE_BREAK         = "Debugger.ToggleBreak"; | 
					
						
							|  |  |  | const char * const BREAK_BY_FUNCTION    = "Debugger.BreakByFunction"; | 
					
						
							|  |  |  | const char * const BREAK_AT_MAIN        = "Debugger.BreakAtMain"; | 
					
						
							|  |  |  | const char * const ADD_TO_WATCH         = "Debugger.AddToWatch"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef Q_OS_MAC
 | 
					
						
							|  |  |  | const char * const INTERRUPT_KEY            = "Shift+F5"; | 
					
						
							|  |  |  | const char * const RESET_KEY                = "Ctrl+Shift+F5"; | 
					
						
							|  |  |  | const char * const STEP_KEY                 = "F7"; | 
					
						
							|  |  |  | const char * const STEPOUT_KEY              = "Shift+F7"; | 
					
						
							|  |  |  | const char * const NEXT_KEY                 = "F6"; | 
					
						
							|  |  |  | const char * const STEPI_KEY                = "Shift+F9"; | 
					
						
							|  |  |  | const char * const NEXTI_KEY                = "Shift+F6"; | 
					
						
							|  |  |  | const char * const RUN_TO_LINE_KEY          = "Shift+F8"; | 
					
						
							|  |  |  | const char * const RUN_TO_FUNCTION_KEY      = "Ctrl+F6"; | 
					
						
							|  |  |  | const char * const JUMP_TO_LINE_KEY         = "Alt+D,Alt+L"; | 
					
						
							|  |  |  | const char * const TOGGLE_BREAK_KEY         = "F8"; | 
					
						
							|  |  |  | const char * const BREAK_BY_FUNCTION_KEY    = "Alt+D,Alt+F"; | 
					
						
							|  |  |  | const char * const BREAK_AT_MAIN_KEY        = "Alt+D,Alt+M"; | 
					
						
							|  |  |  | const char * const ADD_TO_WATCH_KEY         = "Alt+D,Alt+W"; | 
					
						
							|  |  |  | #else
 | 
					
						
							|  |  |  | const char * const INTERRUPT_KEY            = "Shift+F5"; | 
					
						
							|  |  |  | const char * const RESET_KEY                = "Ctrl+Shift+F5"; | 
					
						
							|  |  |  | const char * const STEP_KEY                 = "F11"; | 
					
						
							|  |  |  | const char * const STEPOUT_KEY              = "Shift+F11"; | 
					
						
							|  |  |  | const char * const NEXT_KEY                 = "F10"; | 
					
						
							|  |  |  | const char * const STEPI_KEY                = ""; | 
					
						
							|  |  |  | const char * const NEXTI_KEY                = ""; | 
					
						
							|  |  |  | const char * const RUN_TO_LINE_KEY          = ""; | 
					
						
							|  |  |  | const char * const RUN_TO_FUNCTION_KEY      = ""; | 
					
						
							|  |  |  | const char * const JUMP_TO_LINE_KEY         = ""; | 
					
						
							|  |  |  | const char * const TOGGLE_BREAK_KEY         = "F9"; | 
					
						
							|  |  |  | const char * const BREAK_BY_FUNCTION_KEY    = ""; | 
					
						
							|  |  |  | const char * const BREAK_AT_MAIN_KEY        = ""; | 
					
						
							|  |  |  | const char * const ADD_TO_WATCH_KEY         = "Ctrl+Alt+Q"; | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } // namespace Constants
 | 
					
						
							|  |  |  | } // namespace Debugger
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-28 14:29:54 +01:00
										 |  |  | static ProjectExplorer::SessionManager *sessionManager() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return ProjectExplorer::ProjectExplorerPlugin::instance()->session(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-14 18:09:02 +01:00
										 |  |  | ///////////////////////////////////////////////////////////////////////
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // DebugMode
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | ///////////////////////////////////////////////////////////////////////
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-13 18:15:24 +01:00
										 |  |  | namespace Debugger { | 
					
						
							|  |  |  | namespace Internal { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class DebugMode : public Core::BaseMode | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     Q_OBJECT | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | public: | 
					
						
							|  |  |  |     DebugMode(QObject *parent = 0); | 
					
						
							|  |  |  |     ~DebugMode(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // IMode
 | 
					
						
							|  |  |  |     void activated() {} | 
					
						
							|  |  |  |     void shutdown() {} | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | DebugMode::DebugMode(QObject *parent) | 
					
						
							| 
									
										
										
										
											2009-01-14 12:00:22 +01:00
										 |  |  |   : BaseMode(parent) | 
					
						
							| 
									
										
										
										
											2009-01-13 18:15:24 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2009-01-14 12:00:22 +01:00
										 |  |  |     setName(tr("Debug")); | 
					
						
							|  |  |  |     setUniqueModeName(Constants::MODE_DEBUG); | 
					
						
							|  |  |  |     setIcon(QIcon(":/fancyactionbar/images/mode_Debug.png")); | 
					
						
							|  |  |  |     setPriority(Constants::P_MODE_DEBUG); | 
					
						
							| 
									
										
										
										
											2009-01-13 18:15:24 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | DebugMode::~DebugMode() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     // Make sure the editor manager does not get deleted
 | 
					
						
							|  |  |  |     EditorManager::instance()->setParent(0); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-14 18:09:02 +01:00
										 |  |  | } // namespace Internal
 | 
					
						
							|  |  |  | } // namespace Debugger
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-13 18:15:24 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | ///////////////////////////////////////////////////////////////////////
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // LocationMark
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | ///////////////////////////////////////////////////////////////////////
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-14 18:09:02 +01:00
										 |  |  | namespace Debugger { | 
					
						
							|  |  |  | namespace Internal { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class LocationMark : public TextEditor::BaseTextMark | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | { | 
					
						
							|  |  |  |     Q_OBJECT | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | public: | 
					
						
							|  |  |  |     LocationMark(const QString &fileName, int linenumber) | 
					
						
							|  |  |  |         : BaseTextMark(fileName, linenumber) | 
					
						
							| 
									
										
										
										
											2008-12-12 17:49:52 +01:00
										 |  |  |     {} | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |     ~LocationMark(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     QIcon icon() const; | 
					
						
							|  |  |  |     void updateLineNumber(int /*lineNumber*/) {} | 
					
						
							|  |  |  |     void updateBlock(const QTextBlock & /*block*/) {} | 
					
						
							| 
									
										
										
										
											2008-12-12 17:49:52 +01:00
										 |  |  |     void removedFromEditor() {} | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | LocationMark::~LocationMark() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2008-12-12 17:49:52 +01:00
										 |  |  |     //qDebug() << "LOCATIONMARK DESTRUCTOR";
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | QIcon LocationMark::icon() const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     static const QIcon icon(":/gdbdebugger/images/location.svg"); | 
					
						
							|  |  |  |     return icon; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-14 18:09:02 +01:00
										 |  |  | } // namespace Internal
 | 
					
						
							|  |  |  | } // namespace Debugger
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ///////////////////////////////////////////////////////////////////////
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // GdbOptionPage
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | ///////////////////////////////////////////////////////////////////////
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace Debugger { | 
					
						
							|  |  |  | namespace Internal { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class GdbOptionPage : public Core::IOptionsPage | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     Q_OBJECT | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | public: | 
					
						
							| 
									
										
										
										
											2009-03-30 12:40:08 +02:00
										 |  |  |     GdbOptionPage() {} | 
					
						
							| 
									
										
										
										
											2009-01-14 18:09:02 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     // IOptionsPage
 | 
					
						
							| 
									
										
										
										
											2009-03-23 12:28:02 +01:00
										 |  |  |     QString id() const { return QLatin1String("General"); } | 
					
						
							|  |  |  |     QString trName() const { return tr("General"); } | 
					
						
							| 
									
										
										
										
											2009-03-18 16:43:01 +01:00
										 |  |  |     QString category() const { return QLatin1String("Debugger"); } | 
					
						
							| 
									
										
										
										
											2009-01-14 18:09:02 +01:00
										 |  |  |     QString trCategory() const { return tr("Debugger"); } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     QWidget *createPage(QWidget *parent); | 
					
						
							| 
									
										
										
										
											2009-03-26 15:56:16 +01:00
										 |  |  |     void apply() { m_group.apply(ICore::instance()->settings()); } | 
					
						
							|  |  |  |     void finish() { m_group.finish(); } | 
					
						
							| 
									
										
										
										
											2009-01-14 18:09:02 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | private: | 
					
						
							| 
									
										
										
										
											2009-01-27 15:53:50 +01:00
										 |  |  |     friend class DebuggerPlugin; | 
					
						
							| 
									
										
										
										
											2009-01-14 18:09:02 +01:00
										 |  |  |     Ui::GdbOptionPage m_ui; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-26 17:27:44 +01:00
										 |  |  |     Core::Utils::SavedActionSet m_group; | 
					
						
							| 
									
										
										
										
											2009-01-14 18:09:02 +01:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | QWidget *GdbOptionPage::createPage(QWidget *parent) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     QWidget *w = new QWidget(parent); | 
					
						
							|  |  |  |     m_ui.setupUi(w); | 
					
						
							|  |  |  |     m_ui.gdbLocationChooser->setExpectedKind(Core::Utils::PathChooser::Command); | 
					
						
							|  |  |  |     m_ui.gdbLocationChooser->setPromptDialogTitle(tr("Choose Gdb Location")); | 
					
						
							|  |  |  |     m_ui.scriptFileChooser->setExpectedKind(Core::Utils::PathChooser::File); | 
					
						
							|  |  |  |     m_ui.scriptFileChooser->setPromptDialogTitle(tr("Choose Location of Startup Script File")); | 
					
						
							| 
									
										
										
										
											2009-03-20 09:53:02 +01:00
										 |  |  |     m_ui.terminalChooser->setExpectedKind(Core::Utils::PathChooser::Command); | 
					
						
							|  |  |  |     m_ui.terminalChooser->setPromptDialogTitle(tr("Choose Location of Terminal Application")); | 
					
						
							| 
									
										
										
										
											2009-01-14 18:09:02 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-26 17:27:44 +01:00
										 |  |  |     m_group.clear(); | 
					
						
							| 
									
										
										
										
											2009-03-26 15:56:16 +01:00
										 |  |  |     m_group.insert(theDebuggerAction(GdbLocation),  | 
					
						
							|  |  |  |         m_ui.gdbLocationChooser); | 
					
						
							|  |  |  |     m_group.insert(theDebuggerAction(GdbScriptFile),  | 
					
						
							|  |  |  |         m_ui.scriptFileChooser); | 
					
						
							|  |  |  |     m_group.insert(theDebuggerAction(GdbEnvironment),  | 
					
						
							|  |  |  |         m_ui.environmentEdit); | 
					
						
							|  |  |  |     m_group.insert(theDebuggerAction(TerminalApplication),  | 
					
						
							|  |  |  |         m_ui.terminalChooser); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     m_group.insert(theDebuggerAction(AllPluginBreakpoints),  | 
					
						
							|  |  |  |         m_ui.radioButtonAllPluginBreakpoints); | 
					
						
							|  |  |  |     m_group.insert(theDebuggerAction(SelectedPluginBreakpoints),  | 
					
						
							|  |  |  |         m_ui.radioButtonSelectedPluginBreakpoints); | 
					
						
							|  |  |  |     m_group.insert(theDebuggerAction(NoPluginBreakpoints),  | 
					
						
							|  |  |  |         m_ui.radioButtonNoPluginBreakpoints); | 
					
						
							|  |  |  |     m_group.insert(theDebuggerAction(SelectedPluginBreakpointsPattern),  | 
					
						
							|  |  |  |         m_ui.lineEditSelectedPluginBreakpointsPattern); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-26 17:27:44 +01:00
										 |  |  |     m_group.insert(theDebuggerAction(ListSourceFiles),  | 
					
						
							|  |  |  |         m_ui.checkBoxListSourceFiles); | 
					
						
							| 
									
										
										
										
											2009-03-26 15:56:16 +01:00
										 |  |  |     m_group.insert(theDebuggerAction(SkipKnownFrames),  | 
					
						
							|  |  |  |         m_ui.checkBoxSkipKnownFrames); | 
					
						
							|  |  |  |     m_group.insert(theDebuggerAction(UseToolTips),  | 
					
						
							|  |  |  |         m_ui.checkBoxUseToolTips); | 
					
						
							| 
									
										
										
										
											2009-04-02 15:06:24 +02:00
										 |  |  |     m_group.insert(theDebuggerAction(MaximalStackDepth),  | 
					
						
							|  |  |  |         m_ui.spinBoxMaximalStackDepth); | 
					
						
							| 
									
										
										
										
											2009-01-14 18:09:02 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-19 09:32:09 +01:00
										 |  |  |     m_ui.lineEditSelectedPluginBreakpointsPattern-> | 
					
						
							| 
									
										
										
										
											2009-03-19 15:44:26 +01:00
										 |  |  |         setEnabled(theDebuggerAction(SelectedPluginBreakpoints)->value().toBool()); | 
					
						
							| 
									
										
										
										
											2009-02-12 11:18:38 +01:00
										 |  |  |     connect(m_ui.radioButtonSelectedPluginBreakpoints, SIGNAL(toggled(bool)), | 
					
						
							|  |  |  |         m_ui.lineEditSelectedPluginBreakpointsPattern, SLOT(setEnabled(bool))); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-14 18:09:02 +01:00
										 |  |  |     // FIXME
 | 
					
						
							|  |  |  |     m_ui.environmentEdit->hide(); | 
					
						
							|  |  |  |     m_ui.labelEnvironment->hide(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //m_dumpLogAction = new QAction(this);
 | 
					
						
							|  |  |  |     //m_dumpLogAction->setText(tr("Dump Log File for Debugging Purposes"));
 | 
					
						
							| 
									
										
										
										
											2009-01-27 15:53:50 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-14 18:09:02 +01:00
										 |  |  |     return w; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } // namespace Internal
 | 
					
						
							|  |  |  | } // namespace Debugger
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-13 18:15:24 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-23 12:28:02 +01:00
										 |  |  | ///////////////////////////////////////////////////////////////////////
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // DumperOptionPage
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | ///////////////////////////////////////////////////////////////////////
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace Debugger { | 
					
						
							|  |  |  | namespace Internal { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class DumperOptionPage : public Core::IOptionsPage | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     Q_OBJECT | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | public: | 
					
						
							| 
									
										
										
										
											2009-03-30 12:40:08 +02:00
										 |  |  |     DumperOptionPage() {} | 
					
						
							| 
									
										
										
										
											2009-03-23 12:28:02 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     // IOptionsPage
 | 
					
						
							|  |  |  |     QString id() const { return QLatin1String("DataDumper"); } | 
					
						
							|  |  |  |     QString trName() const { return tr("Data Dumper"); } | 
					
						
							|  |  |  |     QString category() const { return QLatin1String("Debugger"); } | 
					
						
							|  |  |  |     QString trCategory() const { return tr("Debugger"); } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     QWidget *createPage(QWidget *parent); | 
					
						
							| 
									
										
										
										
											2009-03-26 15:56:16 +01:00
										 |  |  |     void apply() { m_group.apply(ICore::instance()->settings()); } | 
					
						
							|  |  |  |     void finish() { m_group.finish(); } | 
					
						
							| 
									
										
										
										
											2009-03-23 12:28:02 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | private: | 
					
						
							| 
									
										
										
										
											2009-03-27 13:04:23 +01:00
										 |  |  |     Q_SLOT void updateState(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-23 12:28:02 +01:00
										 |  |  |     friend class DebuggerPlugin; | 
					
						
							|  |  |  |     Ui::DumperOptionPage m_ui; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-26 17:27:44 +01:00
										 |  |  |     Core::Utils::SavedActionSet m_group; | 
					
						
							| 
									
										
										
										
											2009-03-23 12:28:02 +01:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | QWidget *DumperOptionPage::createPage(QWidget *parent) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     QWidget *w = new QWidget(parent); | 
					
						
							|  |  |  |     m_ui.setupUi(w); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     m_ui.dumperLocationChooser->setExpectedKind(Core::Utils::PathChooser::Command); | 
					
						
							|  |  |  |     m_ui.dumperLocationChooser->setPromptDialogTitle(tr("Choose Dumper Location")); | 
					
						
							| 
									
										
										
										
											2009-03-23 13:02:50 +01:00
										 |  |  |     m_ui.dumperLocationChooser->setInitialBrowsePathBackup( | 
					
						
							|  |  |  |         Core::ICore::instance()->resourcePath() + "../../lib"); | 
					
						
							| 
									
										
										
										
											2009-03-23 12:28:02 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-27 13:04:23 +01:00
										 |  |  |     connect(m_ui.checkBoxUseDumpers, SIGNAL(toggled(bool)), | 
					
						
							|  |  |  |         this, SLOT(updateState())); | 
					
						
							|  |  |  |     connect(m_ui.checkBoxUseCustomDumperLocation, SIGNAL(toggled(bool)), | 
					
						
							|  |  |  |         this, SLOT(updateState())); | 
					
						
							| 
									
										
										
										
											2009-03-23 14:34:01 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-26 17:27:44 +01:00
										 |  |  |     m_group.clear(); | 
					
						
							| 
									
										
										
										
											2009-03-27 13:04:23 +01:00
										 |  |  |     m_group.insert(theDebuggerAction(UseDumpers), | 
					
						
							|  |  |  |         m_ui.checkBoxUseDumpers); | 
					
						
							| 
									
										
										
										
											2009-03-27 12:25:58 +01:00
										 |  |  |     m_group.insert(theDebuggerAction(UseCustomDumperLocation), | 
					
						
							| 
									
										
										
										
											2009-03-27 13:04:23 +01:00
										 |  |  |         m_ui.checkBoxUseCustomDumperLocation); | 
					
						
							| 
									
										
										
										
											2009-03-27 12:25:58 +01:00
										 |  |  |     m_group.insert(theDebuggerAction(CustomDumperLocation), | 
					
						
							| 
									
										
										
										
											2009-03-26 15:56:16 +01:00
										 |  |  |         m_ui.dumperLocationChooser); | 
					
						
							| 
									
										
										
										
											2009-03-23 12:28:02 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-26 15:56:16 +01:00
										 |  |  |     m_group.insert(theDebuggerAction(DebugDumpers), | 
					
						
							|  |  |  |         m_ui.checkBoxDebugDumpers); | 
					
						
							| 
									
										
										
										
											2009-03-23 12:28:02 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     m_ui.dumperLocationChooser-> | 
					
						
							| 
									
										
										
										
											2009-03-27 12:25:58 +01:00
										 |  |  |         setEnabled(theDebuggerAction(UseCustomDumperLocation)->value().toBool()); | 
					
						
							| 
									
										
										
										
											2009-03-23 12:28:02 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | #ifndef QT_DEBUG
 | 
					
						
							|  |  |  | #if 0
 | 
					
						
							|  |  |  |     cmd = am->registerAction(m_manager->m_dumpLogAction, | 
					
						
							|  |  |  |         Constants::DUMP_LOG, globalcontext); | 
					
						
							|  |  |  |     //cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+D,Ctrl+L")));
 | 
					
						
							|  |  |  |     cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+Shift+F11"))); | 
					
						
							|  |  |  |     mdebug->addAction(cmd); | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return w; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-27 13:04:23 +01:00
										 |  |  | void DumperOptionPage::updateState() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     m_ui.checkBoxUseCustomDumperLocation->setEnabled( | 
					
						
							|  |  |  |         m_ui.checkBoxUseDumpers->isChecked()); | 
					
						
							|  |  |  |     m_ui.dumperLocationChooser->setEnabled( | 
					
						
							|  |  |  |         m_ui.checkBoxUseDumpers->isChecked() | 
					
						
							|  |  |  |             && m_ui.checkBoxUseCustomDumperLocation->isChecked()); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-23 12:28:02 +01:00
										 |  |  | } // namespace Internal
 | 
					
						
							|  |  |  | } // namespace Debugger
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | ///////////////////////////////////////////////////////////////////////
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // DebuggerPlugin
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | ///////////////////////////////////////////////////////////////////////
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | DebuggerPlugin::DebuggerPlugin() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     m_generalOptionPage = 0; | 
					
						
							| 
									
										
										
										
											2009-03-23 12:28:02 +01:00
										 |  |  |     m_dumperOptionPage = 0; | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |     m_locationMark = 0; | 
					
						
							|  |  |  |     m_manager = 0; | 
					
						
							| 
									
										
										
										
											2009-01-13 18:15:24 +01:00
										 |  |  |     m_debugMode = 0; | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | DebuggerPlugin::~DebuggerPlugin() | 
					
						
							|  |  |  | {} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-13 18:15:24 +01:00
										 |  |  | static QSettings *settings() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2009-01-20 11:52:04 +01:00
										 |  |  |     return ICore::instance()->settings(); | 
					
						
							| 
									
										
										
										
											2009-01-13 18:15:24 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | void DebuggerPlugin::shutdown() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     if (m_debugMode) | 
					
						
							|  |  |  |         m_debugMode->shutdown(); // saves state including manager information
 | 
					
						
							| 
									
										
										
										
											2008-12-09 12:08:56 +01:00
										 |  |  |     QTC_ASSERT(m_manager, /**/); | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |     if (m_manager) | 
					
						
							|  |  |  |         m_manager->shutdown(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-13 18:15:24 +01:00
										 |  |  |     writeSettings(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |     //qDebug() << "DebuggerPlugin::~DebuggerPlugin";
 | 
					
						
							|  |  |  |     removeObject(m_debugMode); | 
					
						
							|  |  |  |     removeObject(m_generalOptionPage); | 
					
						
							| 
									
										
										
										
											2009-03-23 12:28:02 +01:00
										 |  |  |     removeObject(m_dumperOptionPage); | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     // FIXME: when using the line below, BreakWindow etc gets deleted twice.
 | 
					
						
							|  |  |  |     // so better leak for now...
 | 
					
						
							|  |  |  |     delete m_debugMode; | 
					
						
							|  |  |  |     m_debugMode = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     delete m_generalOptionPage; | 
					
						
							|  |  |  |     m_generalOptionPage = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-23 12:28:02 +01:00
										 |  |  |     delete m_dumperOptionPage; | 
					
						
							|  |  |  |     m_dumperOptionPage = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |     delete m_locationMark; | 
					
						
							|  |  |  |     m_locationMark = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     delete m_manager; | 
					
						
							|  |  |  |     m_manager = 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-16 14:22:13 +01:00
										 |  |  | bool DebuggerPlugin::initialize(const QStringList &arguments, QString *errorMessage) | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | { | 
					
						
							|  |  |  |     Q_UNUSED(arguments); | 
					
						
							| 
									
										
										
										
											2009-03-16 14:22:13 +01:00
										 |  |  |     Q_UNUSED(errorMessage); | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     m_manager = new DebuggerManager; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-20 11:52:04 +01:00
										 |  |  |     ICore *core = ICore::instance(); | 
					
						
							| 
									
										
										
										
											2008-12-09 12:08:56 +01:00
										 |  |  |     QTC_ASSERT(core, return false); | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-13 17:41:23 +01:00
										 |  |  |     Core::ActionManager *am = core->actionManager(); | 
					
						
							|  |  |  |     QTC_ASSERT(am, return false); | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     Core::UniqueIDManager *uidm = core->uniqueIDManager(); | 
					
						
							| 
									
										
										
										
											2008-12-09 12:08:56 +01:00
										 |  |  |     QTC_ASSERT(uidm, return false); | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     QList<int> globalcontext; | 
					
						
							|  |  |  |     globalcontext << Core::Constants::C_GLOBAL_ID; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     QList<int> cppcontext; | 
					
						
							|  |  |  |     cppcontext << uidm->uniqueIdentifier(ProjectExplorer::Constants::LANG_CXX); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     QList<int> debuggercontext; | 
					
						
							|  |  |  |     debuggercontext << uidm->uniqueIdentifier(C_GDBDEBUGGER); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     QList<int> cppeditorcontext; | 
					
						
							|  |  |  |     cppeditorcontext << uidm->uniqueIdentifier(CppEditor::Constants::C_CPPEDITOR); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     QList<int> texteditorcontext; | 
					
						
							|  |  |  |     texteditorcontext << uidm->uniqueIdentifier(TextEditor::Constants::C_TEXTEDITOR); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     m_gdbRunningContext = uidm->uniqueIdentifier(Constants::GDBRUNNING); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-05 16:39:33 +01:00
										 |  |  |     m_breakpointMarginAction = new QAction(this); | 
					
						
							|  |  |  |     m_breakpointMarginAction->setText("Toggle Breakpoint"); | 
					
						
							|  |  |  |     //m_breakpointMarginAction->setIcon(QIcon(":/gdbdebugger/images/breakpoint.svg"));
 | 
					
						
							|  |  |  |     connect(m_breakpointMarginAction, SIGNAL(triggered()), | 
					
						
							|  |  |  |         this, SLOT(breakpointMarginActionTriggered())); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-14 12:39:59 +01:00
										 |  |  |     //Core::ActionContainer *mcppcontext =
 | 
					
						
							| 
									
										
										
										
											2009-01-13 17:41:23 +01:00
										 |  |  |     //    am->actionContainer(CppEditor::Constants::M_CONTEXT);
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-14 12:39:59 +01:00
										 |  |  |     Core::ActionContainer *mdebug = | 
					
						
							| 
									
										
										
										
											2009-01-13 17:41:23 +01:00
										 |  |  |         am->actionContainer(ProjectExplorer::Constants::M_DEBUG); | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-14 13:17:53 +01:00
										 |  |  |     Core::Command *cmd = 0; | 
					
						
							| 
									
										
										
										
											2009-01-13 17:41:23 +01:00
										 |  |  |     cmd = am->registerAction(m_manager->m_startExternalAction, | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |         Constants::STARTEXTERNAL, globalcontext); | 
					
						
							|  |  |  |     mdebug->addAction(cmd, Core::Constants::G_DEFAULT_ONE); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-13 17:41:23 +01:00
										 |  |  |     cmd = am->registerAction(m_manager->m_attachExternalAction, | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |         Constants::ATTACHEXTERNAL, globalcontext); | 
					
						
							|  |  |  |     mdebug->addAction(cmd, Core::Constants::G_DEFAULT_ONE); | 
					
						
							| 
									
										
										
										
											2009-03-02 15:14:12 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-04 16:00:43 +01:00
										 |  |  |     if (m_manager->m_attachCoreAction) { | 
					
						
							|  |  |  |         cmd = am->registerAction(m_manager->m_attachCoreAction, | 
					
						
							|  |  |  |                                  Constants::ATTACHCORE, globalcontext); | 
					
						
							|  |  |  |         mdebug->addAction(cmd, Core::Constants::G_DEFAULT_ONE); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-13 17:41:23 +01:00
										 |  |  |     cmd = am->registerAction(m_manager->m_continueAction, | 
					
						
							| 
									
										
										
										
											2009-02-17 14:35:32 +01:00
										 |  |  |         ProjectExplorer::Constants::DEBUG, QList<int>() << m_gdbRunningContext); | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-13 17:41:23 +01:00
										 |  |  |     cmd = am->registerAction(m_manager->m_stopAction, | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |         Constants::INTERRUPT, globalcontext); | 
					
						
							| 
									
										
										
										
											2009-01-14 13:17:53 +01:00
										 |  |  |     cmd->setAttribute(Core::Command::CA_UpdateText); | 
					
						
							|  |  |  |     cmd->setAttribute(Core::Command::CA_UpdateIcon); | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |     cmd->setDefaultKeySequence(QKeySequence(Constants::INTERRUPT_KEY)); | 
					
						
							|  |  |  |     cmd->setDefaultText(tr("Stop Debugger/Interrupt Debugger")); | 
					
						
							|  |  |  |     mdebug->addAction(cmd, Core::Constants::G_DEFAULT_ONE); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-13 17:41:23 +01:00
										 |  |  |     cmd = am->registerAction(m_manager->m_resetAction, | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |         Constants::RESET, globalcontext); | 
					
						
							| 
									
										
										
										
											2009-01-14 13:17:53 +01:00
										 |  |  |     cmd->setAttribute(Core::Command::CA_UpdateText); | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |     cmd->setDefaultKeySequence(QKeySequence(Constants::RESET_KEY)); | 
					
						
							|  |  |  |     cmd->setDefaultText(tr("Reset Debugger")); | 
					
						
							|  |  |  |     //disabled mdebug->addAction(cmd, Core::Constants::G_DEFAULT_ONE);
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     QAction *sep = new QAction(this); | 
					
						
							|  |  |  |     sep->setSeparator(true); | 
					
						
							| 
									
										
										
										
											2009-01-13 17:41:23 +01:00
										 |  |  |     cmd = am->registerAction(sep, QLatin1String("Debugger.Sep1"), globalcontext); | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |     mdebug->addAction(cmd); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-13 17:41:23 +01:00
										 |  |  |     cmd = am->registerAction(m_manager->m_nextAction, | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |         Constants::NEXT, debuggercontext); | 
					
						
							|  |  |  |     cmd->setDefaultKeySequence(QKeySequence(Constants::NEXT_KEY)); | 
					
						
							|  |  |  |     mdebug->addAction(cmd); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-13 17:41:23 +01:00
										 |  |  |     cmd = am->registerAction(m_manager->m_stepAction, | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |         Constants::STEP, debuggercontext); | 
					
						
							|  |  |  |     cmd->setDefaultKeySequence(QKeySequence(Constants::STEP_KEY)); | 
					
						
							|  |  |  |     mdebug->addAction(cmd); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-13 17:41:23 +01:00
										 |  |  |     cmd = am->registerAction(m_manager->m_stepOutAction, | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |         Constants::STEPOUT, debuggercontext); | 
					
						
							|  |  |  |     cmd->setDefaultKeySequence(QKeySequence(Constants::STEPOUT_KEY)); | 
					
						
							|  |  |  |     mdebug->addAction(cmd); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-13 17:41:23 +01:00
										 |  |  |     cmd = am->registerAction(m_manager->m_nextIAction, | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |         Constants::NEXTI, debuggercontext); | 
					
						
							|  |  |  |     cmd->setDefaultKeySequence(QKeySequence(Constants::NEXTI_KEY)); | 
					
						
							|  |  |  |     mdebug->addAction(cmd); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-13 17:41:23 +01:00
										 |  |  |     cmd = am->registerAction(m_manager->m_stepIAction, | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |         Constants::STEPI, debuggercontext); | 
					
						
							|  |  |  |     cmd->setDefaultKeySequence(QKeySequence(Constants::STEPI_KEY)); | 
					
						
							|  |  |  |     mdebug->addAction(cmd); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-13 17:41:23 +01:00
										 |  |  |     cmd = am->registerAction(m_manager->m_runToLineAction, | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |         Constants::RUN_TO_LINE, debuggercontext); | 
					
						
							|  |  |  |     cmd->setDefaultKeySequence(QKeySequence(Constants::RUN_TO_LINE_KEY)); | 
					
						
							|  |  |  |     mdebug->addAction(cmd); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-13 17:41:23 +01:00
										 |  |  |     cmd = am->registerAction(m_manager->m_runToFunctionAction, | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |         Constants::RUN_TO_FUNCTION, debuggercontext); | 
					
						
							|  |  |  |     cmd->setDefaultKeySequence(QKeySequence(Constants::RUN_TO_FUNCTION_KEY)); | 
					
						
							|  |  |  |     mdebug->addAction(cmd); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-13 17:41:23 +01:00
										 |  |  |     cmd = am->registerAction(m_manager->m_jumpToLineAction, | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |         Constants::JUMP_TO_LINE, debuggercontext); | 
					
						
							|  |  |  |     mdebug->addAction(cmd); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     sep = new QAction(this); | 
					
						
							|  |  |  |     sep->setSeparator(true); | 
					
						
							| 
									
										
										
										
											2009-01-13 17:41:23 +01:00
										 |  |  |     cmd = am->registerAction(sep, QLatin1String("Debugger.Sep3"), globalcontext); | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |     mdebug->addAction(cmd); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-13 17:41:23 +01:00
										 |  |  |     cmd = am->registerAction(m_manager->m_breakAction, | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |         Constants::TOGGLE_BREAK, cppeditorcontext); | 
					
						
							|  |  |  |     cmd->setDefaultKeySequence(QKeySequence(Constants::TOGGLE_BREAK_KEY)); | 
					
						
							|  |  |  |     mdebug->addAction(cmd); | 
					
						
							|  |  |  |     //mcppcontext->addAction(cmd);
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-13 17:41:23 +01:00
										 |  |  |     cmd = am->registerAction(m_manager->m_breakByFunctionAction, | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |         Constants::BREAK_BY_FUNCTION, globalcontext); | 
					
						
							|  |  |  |     mdebug->addAction(cmd); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-13 17:41:23 +01:00
										 |  |  |     cmd = am->registerAction(m_manager->m_breakAtMainAction, | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |         Constants::BREAK_AT_MAIN, globalcontext); | 
					
						
							|  |  |  |     mdebug->addAction(cmd); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     sep = new QAction(this); | 
					
						
							|  |  |  |     sep->setSeparator(true); | 
					
						
							| 
									
										
										
										
											2009-01-13 17:41:23 +01:00
										 |  |  |     cmd = am->registerAction(sep, QLatin1String("Debugger.Sep2"), globalcontext); | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |     mdebug->addAction(cmd); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     sep = new QAction(this); | 
					
						
							|  |  |  |     sep->setSeparator(true); | 
					
						
							| 
									
										
										
										
											2009-01-13 17:41:23 +01:00
										 |  |  |     cmd = am->registerAction(sep, QLatin1String("Debugger.Sep4"), globalcontext); | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |     mdebug->addAction(cmd); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-13 17:41:23 +01:00
										 |  |  |     cmd = am->registerAction(m_manager->m_watchAction, | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |         Constants::ADD_TO_WATCH, cppeditorcontext); | 
					
						
							|  |  |  |     //cmd->setDefaultKeySequence(QKeySequence(tr("ALT+D,ALT+W")));
 | 
					
						
							|  |  |  |     mdebug->addAction(cmd); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-13 17:41:23 +01:00
										 |  |  |     // Views menu
 | 
					
						
							|  |  |  |     cmd = am->registerAction(sep, QLatin1String("Debugger.Sep5"), globalcontext); | 
					
						
							|  |  |  |     mdebug->addAction(cmd); | 
					
						
							| 
									
										
										
										
											2009-01-14 12:39:59 +01:00
										 |  |  |     ActionContainer *viewsMenu = am->createMenu(Constants::M_DEBUG_VIEWS); | 
					
						
							| 
									
										
										
										
											2009-01-13 17:41:23 +01:00
										 |  |  |     QMenu *m = viewsMenu->menu(); | 
					
						
							|  |  |  |     m->setEnabled(true); | 
					
						
							|  |  |  |     m->setTitle(tr("&Views")); | 
					
						
							|  |  |  |     mdebug->addMenu(viewsMenu, Core::Constants::G_DEFAULT_THREE); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     m_toggleLockedAction = new QAction(tr("Locked"), this); | 
					
						
							|  |  |  |     m_toggleLockedAction->setCheckable(true); | 
					
						
							|  |  |  |     m_toggleLockedAction->setChecked(true); | 
					
						
							|  |  |  |     connect(m_toggleLockedAction, SIGNAL(toggled(bool)), | 
					
						
							|  |  |  |         m_manager, SLOT(setLocked(bool))); | 
					
						
							|  |  |  |     foreach (QDockWidget *dockWidget, m_manager->dockWidgets()) { | 
					
						
							|  |  |  |         cmd = am->registerAction(dockWidget->toggleViewAction(), | 
					
						
							|  |  |  |             "Debugger." + dockWidget->objectName(), debuggercontext); | 
					
						
							|  |  |  |         viewsMenu->addAction(cmd); | 
					
						
							|  |  |  |         //m->addAction(dockWidget->toggleViewAction());
 | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     m->addSeparator(); | 
					
						
							|  |  |  |     m->addAction(m_toggleLockedAction); | 
					
						
							|  |  |  |     m->addSeparator(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     QAction *resetToSimpleAction = viewsMenu->menu()->addAction(tr("Reset to default layout")); | 
					
						
							|  |  |  |     connect(resetToSimpleAction, SIGNAL(triggered()), | 
					
						
							|  |  |  |         m_manager, SLOT(setSimpleDockWidgetArrangement())); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-28 12:15:40 +01:00
										 |  |  |    // FIXME:
 | 
					
						
							| 
									
										
										
										
											2009-03-30 12:40:08 +02:00
										 |  |  |     m_generalOptionPage = new GdbOptionPage; | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |     addObject(m_generalOptionPage); | 
					
						
							| 
									
										
										
										
											2009-03-30 12:40:08 +02:00
										 |  |  |     m_dumperOptionPage = new DumperOptionPage; | 
					
						
							| 
									
										
										
										
											2009-03-23 12:28:02 +01:00
										 |  |  |     addObject(m_dumperOptionPage); | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     m_locationMark = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-13 18:15:24 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     //
 | 
					
						
							|  |  |  |     // Debug mode setup
 | 
					
						
							|  |  |  |     //
 | 
					
						
							|  |  |  |     m_debugMode = new DebugMode(this); | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |     //addAutoReleasedObject(m_debugMode);
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     addAutoReleasedObject(new DebuggerRunner(m_manager)); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-13 18:15:24 +01:00
										 |  |  |     QList<int> context; | 
					
						
							|  |  |  |     context.append(uidm->uniqueIdentifier(Core::Constants::C_EDITORMANAGER)); | 
					
						
							|  |  |  |     context.append(uidm->uniqueIdentifier(Debugger::Constants::C_GDBDEBUGGER)); | 
					
						
							|  |  |  |     context.append(uidm->uniqueIdentifier(Core::Constants::C_NAVIGATION_PANE)); | 
					
						
							|  |  |  |     m_debugMode->setContext(context); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     QBoxLayout *editorHolderLayout = new QVBoxLayout; | 
					
						
							|  |  |  |     editorHolderLayout->setMargin(0); | 
					
						
							|  |  |  |     editorHolderLayout->setSpacing(0); | 
					
						
							|  |  |  |     editorHolderLayout->addWidget(new EditorManagerPlaceHolder(m_debugMode)); | 
					
						
							|  |  |  |     editorHolderLayout->addWidget(new FindToolBarPlaceHolder(m_debugMode)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     QWidget *editorAndFindWidget = new QWidget; | 
					
						
							|  |  |  |     editorAndFindWidget->setLayout(editorHolderLayout); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     MiniSplitter *rightPaneSplitter = new MiniSplitter; | 
					
						
							|  |  |  |     rightPaneSplitter->addWidget(editorAndFindWidget); | 
					
						
							|  |  |  |     rightPaneSplitter->addWidget(new RightPanePlaceHolder(m_debugMode)); | 
					
						
							|  |  |  |     rightPaneSplitter->setStretchFactor(0, 1); | 
					
						
							|  |  |  |     rightPaneSplitter->setStretchFactor(1, 0); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     QWidget *centralWidget = new QWidget; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     m_manager->mainWindow()->setCentralWidget(centralWidget); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     MiniSplitter *splitter = new MiniSplitter; | 
					
						
							|  |  |  |     splitter->addWidget(m_manager->mainWindow()); | 
					
						
							|  |  |  |     splitter->addWidget(new OutputPanePlaceHolder(m_debugMode)); | 
					
						
							|  |  |  |     splitter->setStretchFactor(0, 10); | 
					
						
							|  |  |  |     splitter->setStretchFactor(1, 0); | 
					
						
							|  |  |  |     splitter->setOrientation(Qt::Vertical); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     MiniSplitter *splitter2 = new MiniSplitter; | 
					
						
							|  |  |  |     splitter2->addWidget(new NavigationWidgetPlaceHolder(m_debugMode)); | 
					
						
							|  |  |  |     splitter2->addWidget(splitter); | 
					
						
							|  |  |  |     splitter2->setStretchFactor(0, 0); | 
					
						
							|  |  |  |     splitter2->setStretchFactor(1, 1); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     m_debugMode->setWidget(splitter2); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     QToolBar *debugToolBar = new QToolBar; | 
					
						
							| 
									
										
										
										
											2009-02-04 12:46:38 +01:00
										 |  |  |     debugToolBar->setProperty("topBorder", true); | 
					
						
							| 
									
										
										
										
											2009-01-13 18:15:24 +01:00
										 |  |  |     debugToolBar->addAction(am->command(ProjectExplorer::Constants::DEBUG)->action()); | 
					
						
							|  |  |  |     debugToolBar->addAction(am->command(Constants::INTERRUPT)->action()); | 
					
						
							|  |  |  |     debugToolBar->addAction(am->command(Constants::NEXT)->action()); | 
					
						
							|  |  |  |     debugToolBar->addAction(am->command(Constants::STEP)->action()); | 
					
						
							|  |  |  |     debugToolBar->addAction(am->command(Constants::STEPOUT)->action()); | 
					
						
							|  |  |  |     debugToolBar->addSeparator(); | 
					
						
							|  |  |  |     debugToolBar->addAction(am->command(Constants::STEPI)->action()); | 
					
						
							|  |  |  |     debugToolBar->addAction(am->command(Constants::NEXTI)->action()); | 
					
						
							|  |  |  |     debugToolBar->addSeparator(); | 
					
						
							|  |  |  |     debugToolBar->addWidget(new QLabel(tr("Threads:"))); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     QComboBox *threadBox = new QComboBox; | 
					
						
							|  |  |  |     threadBox->setModel(m_manager->threadsModel()); | 
					
						
							|  |  |  |     connect(threadBox, SIGNAL(activated(int)), | 
					
						
							|  |  |  |         m_manager->threadsWindow(), SIGNAL(threadSelected(int))); | 
					
						
							|  |  |  |     debugToolBar->addWidget(threadBox); | 
					
						
							|  |  |  |     debugToolBar->addWidget(m_manager->statusLabel()); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     QWidget *stretch = new QWidget; | 
					
						
							|  |  |  |     stretch->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum); | 
					
						
							|  |  |  |     debugToolBar->addWidget(stretch); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     QBoxLayout *toolBarAddingLayout = new QVBoxLayout(centralWidget); | 
					
						
							|  |  |  |     toolBarAddingLayout->setMargin(0); | 
					
						
							|  |  |  |     toolBarAddingLayout->setSpacing(0); | 
					
						
							|  |  |  |     toolBarAddingLayout->addWidget(rightPaneSplitter); | 
					
						
							|  |  |  |     toolBarAddingLayout->addWidget(debugToolBar); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     m_manager->createDockWidgets(); | 
					
						
							|  |  |  |     m_manager->setSimpleDockWidgetArrangement(); | 
					
						
							|  |  |  |     readSettings(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     connect(ModeManager::instance(), SIGNAL(currentModeChanged(Core::IMode*)), | 
					
						
							|  |  |  |             this, SLOT(focusCurrentEditor(Core::IMode*))); | 
					
						
							|  |  |  |     m_debugMode->widget()->setFocusProxy(EditorManager::instance()); | 
					
						
							|  |  |  |     addObject(m_debugMode); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //
 | 
					
						
							|  |  |  |     //  Connections
 | 
					
						
							|  |  |  |     //
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |     // ProjectExplorer
 | 
					
						
							| 
									
										
										
										
											2009-01-28 14:29:54 +01:00
										 |  |  |     connect(sessionManager(), SIGNAL(sessionLoaded()), | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |        m_manager, SLOT(sessionLoaded())); | 
					
						
							| 
									
										
										
										
											2009-01-28 14:29:54 +01:00
										 |  |  |     connect(sessionManager(), SIGNAL(aboutToSaveSession()), | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |        m_manager, SLOT(aboutToSaveSession())); | 
					
						
							| 
									
										
										
										
											2009-04-01 16:49:45 +02:00
										 |  |  |     connect(sessionManager(), SIGNAL(sessionUnloaded()), | 
					
						
							|  |  |  |        m_manager, SLOT(sessionUnloaded())); | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     // EditorManager
 | 
					
						
							|  |  |  |     QObject *editorManager = core->editorManager(); | 
					
						
							|  |  |  |     connect(editorManager, SIGNAL(editorAboutToClose(Core::IEditor*)), | 
					
						
							|  |  |  |         this, SLOT(editorAboutToClose(Core::IEditor*))); | 
					
						
							|  |  |  |     connect(editorManager, SIGNAL(editorOpened(Core::IEditor*)), | 
					
						
							|  |  |  |         this, SLOT(editorOpened(Core::IEditor*))); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Application interaction
 | 
					
						
							|  |  |  |     connect(m_manager, SIGNAL(currentTextEditorRequested(QString*,int*,QObject**)), | 
					
						
							|  |  |  |         this, SLOT(queryCurrentTextEditor(QString*,int*,QObject**))); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     connect(m_manager, SIGNAL(setSessionValueRequested(QString,QVariant)), | 
					
						
							|  |  |  |         this, SLOT(setSessionValue(QString,QVariant))); | 
					
						
							|  |  |  |     connect(m_manager, SIGNAL(sessionValueRequested(QString,QVariant*)), | 
					
						
							|  |  |  |         this, SLOT(querySessionValue(QString,QVariant*))); | 
					
						
							|  |  |  |     connect(m_manager, SIGNAL(setConfigValueRequested(QString,QVariant)), | 
					
						
							|  |  |  |         this, SLOT(setConfigValue(QString,QVariant))); | 
					
						
							|  |  |  |     connect(m_manager, SIGNAL(configValueRequested(QString,QVariant*)), | 
					
						
							|  |  |  |         this, SLOT(queryConfigValue(QString,QVariant*))); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     connect(m_manager, SIGNAL(resetLocationRequested()), | 
					
						
							|  |  |  |         this, SLOT(resetLocation())); | 
					
						
							|  |  |  |     connect(m_manager, SIGNAL(gotoLocationRequested(QString,int,bool)), | 
					
						
							|  |  |  |         this, SLOT(gotoLocation(QString,int,bool))); | 
					
						
							|  |  |  |     connect(m_manager, SIGNAL(statusChanged(int)), | 
					
						
							|  |  |  |         this, SLOT(changeStatus(int))); | 
					
						
							|  |  |  |     connect(m_manager, SIGNAL(previousModeRequested()), | 
					
						
							|  |  |  |         this, SLOT(activatePreviousMode())); | 
					
						
							|  |  |  |     connect(m_manager, SIGNAL(debugModeRequested()), | 
					
						
							|  |  |  |         this, SLOT(activateDebugMode())); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-19 15:54:52 +01:00
										 |  |  |     connect(theDebuggerAction(SettingsDialog), SIGNAL(triggered()), | 
					
						
							| 
									
										
										
										
											2009-02-27 11:41:19 +01:00
										 |  |  |         this, SLOT(showSettingsDialog())); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |     return true; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void DebuggerPlugin::extensionsInitialized() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2009-04-06 10:58:48 +02:00
										 |  |  |     // time gdb -i mi -ex 'debuggerplugin.cpp:800' -ex r -ex q bin/qtcreator.bin
 | 
					
						
							| 
									
										
										
										
											2009-04-06 17:27:15 +02:00
										 |  |  |     //qDebug() << "EXTENSIONS INITIALIZED";
 | 
					
						
							| 
									
										
										
										
											2009-04-06 16:30:11 +02:00
										 |  |  |     QByteArray env = qgetenv("QTC_DEBUGGER_TEST"); | 
					
						
							|  |  |  |     if (!env.isEmpty()) | 
					
						
							|  |  |  |         m_manager->runTest(QString::fromLocal8Bit(env)); | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*! Activates the previous mode when the current mode is the debug mode. */ | 
					
						
							|  |  |  | void DebuggerPlugin::activatePreviousMode() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2009-01-20 11:52:04 +01:00
										 |  |  |     Core::ModeManager *const modeManager = ICore::instance()->modeManager(); | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     if (modeManager->currentMode() == modeManager->mode(Constants::MODE_DEBUG) | 
					
						
							|  |  |  |             && !m_previousMode.isEmpty()) { | 
					
						
							|  |  |  |         modeManager->activateMode(m_previousMode); | 
					
						
							|  |  |  |         m_previousMode.clear(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void DebuggerPlugin::activateDebugMode() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2009-01-21 15:52:34 +01:00
										 |  |  |     ModeManager *modeManager = ModeManager::instance(); | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |     m_previousMode = QLatin1String(modeManager->currentMode()->uniqueModeName()); | 
					
						
							|  |  |  |     modeManager->activateMode(QLatin1String(MODE_DEBUG)); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void DebuggerPlugin::queryCurrentTextEditor(QString *fileName, int *lineNumber, QObject **object) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2009-01-21 15:52:34 +01:00
										 |  |  |     EditorManager *editorManager = EditorManager::instance(); | 
					
						
							|  |  |  |     if (!editorManager) | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |         return; | 
					
						
							| 
									
										
										
										
											2009-01-21 15:52:34 +01:00
										 |  |  |     Core::IEditor *editor = editorManager->currentEditor(); | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |     ITextEditor *textEditor = qobject_cast<ITextEditor*>(editor); | 
					
						
							|  |  |  |     if (!textEditor) | 
					
						
							|  |  |  |         return; | 
					
						
							|  |  |  |     if (fileName) | 
					
						
							|  |  |  |         *fileName = textEditor->file()->fileName(); | 
					
						
							|  |  |  |     if (lineNumber) | 
					
						
							|  |  |  |         *lineNumber = textEditor->currentLine(); | 
					
						
							|  |  |  |     if (object) | 
					
						
							|  |  |  |         *object = textEditor->widget(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void DebuggerPlugin::editorOpened(Core::IEditor *editor) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     if (ITextEditor *textEditor = qobject_cast<ITextEditor *>(editor)) { | 
					
						
							|  |  |  |         connect(textEditor, SIGNAL(markRequested(TextEditor::ITextEditor*,int)), | 
					
						
							|  |  |  |             this, SLOT(requestMark(TextEditor::ITextEditor*,int))); | 
					
						
							|  |  |  |         connect(editor, SIGNAL(tooltipRequested(TextEditor::ITextEditor*,QPoint,int)), | 
					
						
							|  |  |  |             this, SLOT(showToolTip(TextEditor::ITextEditor*,QPoint,int))); | 
					
						
							| 
									
										
										
										
											2008-12-05 16:39:33 +01:00
										 |  |  |         connect(textEditor, SIGNAL(markContextMenuRequested(TextEditor::ITextEditor*,int,QMenu*)), | 
					
						
							|  |  |  |             this, SLOT(requestContextMenu(TextEditor::ITextEditor*,int,QMenu*))); | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void DebuggerPlugin::editorAboutToClose(Core::IEditor *editor) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     if (ITextEditor *textEditor = qobject_cast<ITextEditor *>(editor)) { | 
					
						
							|  |  |  |         disconnect(textEditor, SIGNAL(markRequested(TextEditor::ITextEditor*,int)), | 
					
						
							|  |  |  |             this, SLOT(requestMark(TextEditor::ITextEditor*,int))); | 
					
						
							|  |  |  |         disconnect(editor, SIGNAL(tooltipRequested(TextEditor::ITextEditor*,QPoint,int)), | 
					
						
							|  |  |  |             this, SLOT(showToolTip(TextEditor::ITextEditor*,QPoint,int))); | 
					
						
							| 
									
										
										
										
											2008-12-05 16:39:33 +01:00
										 |  |  |         disconnect(textEditor, SIGNAL(markContextMenuRequested(TextEditor::ITextEditor*,int,QMenu*)), | 
					
						
							|  |  |  |             this, SLOT(requestContextMenu(TextEditor::ITextEditor*,int,QMenu*))); | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-05 16:39:33 +01:00
										 |  |  | void DebuggerPlugin::requestContextMenu(TextEditor::ITextEditor *editor, | 
					
						
							|  |  |  |     int lineNumber, QMenu *menu) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     m_breakpointMarginActionLineNumber = lineNumber; | 
					
						
							|  |  |  |     m_breakpointMarginActionFileName = editor->file()->fileName(); | 
					
						
							|  |  |  |     menu->addAction(m_breakpointMarginAction); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void DebuggerPlugin::breakpointMarginActionTriggered() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     m_manager->toggleBreakpoint( | 
					
						
							|  |  |  |         m_breakpointMarginActionFileName, | 
					
						
							|  |  |  |         m_breakpointMarginActionLineNumber | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | void DebuggerPlugin::requestMark(TextEditor::ITextEditor *editor, int lineNumber) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     m_manager->toggleBreakpoint(editor->file()->fileName(), lineNumber); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void DebuggerPlugin::showToolTip(TextEditor::ITextEditor *editor, | 
					
						
							|  |  |  |     const QPoint &point, int pos) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2009-03-19 15:44:26 +01:00
										 |  |  |     if (!theDebuggerBoolSetting(UseToolTips)) | 
					
						
							| 
									
										
										
										
											2008-12-08 19:26:00 +01:00
										 |  |  |         return; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |     QPlainTextEdit *plaintext = qobject_cast<QPlainTextEdit*>(editor->widget()); | 
					
						
							|  |  |  |     if (!plaintext) | 
					
						
							|  |  |  |         return; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     QString expr = plaintext->textCursor().selectedText(); | 
					
						
							|  |  |  |     if (expr.isEmpty()) { | 
					
						
							|  |  |  |         QTextCursor tc(plaintext->document()); | 
					
						
							|  |  |  |         tc.setPosition(pos); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         const QChar ch = editor->characterAt(pos); | 
					
						
							|  |  |  |         if (ch.isLetterOrNumber() || ch == QLatin1Char('_')) | 
					
						
							|  |  |  |             tc.movePosition(QTextCursor::EndOfWord); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // Fetch the expression's code.
 | 
					
						
							| 
									
										
										
										
											2009-01-13 18:15:24 +01:00
										 |  |  |         CPlusPlus::ExpressionUnderCursor expressionUnderCursor; | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |         expr = expressionUnderCursor(tc); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     //qDebug() << " TOOLTIP  EXPR " << expr;
 | 
					
						
							|  |  |  |     m_manager->setToolTipExpression(point, expr); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void DebuggerPlugin::setSessionValue(const QString &name, const QVariant &value) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     //qDebug() << "SET SESSION VALUE" << name << value;
 | 
					
						
							| 
									
										
										
										
											2009-01-28 14:29:54 +01:00
										 |  |  |     QTC_ASSERT(sessionManager(), return); | 
					
						
							|  |  |  |     sessionManager()->setValue(name, value); | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void DebuggerPlugin::querySessionValue(const QString &name, QVariant *value) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2009-01-28 14:29:54 +01:00
										 |  |  |     QTC_ASSERT(sessionManager(), return); | 
					
						
							|  |  |  |     *value = sessionManager()->value(name); | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |     //qDebug() << "GET SESSION VALUE: " << name << value;
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void DebuggerPlugin::setConfigValue(const QString &name, const QVariant &value) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2008-12-09 12:08:56 +01:00
										 |  |  |     QTC_ASSERT(m_debugMode, return); | 
					
						
							| 
									
										
										
										
											2009-01-13 18:15:24 +01:00
										 |  |  |     settings()->setValue(name, value); | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void DebuggerPlugin::queryConfigValue(const QString &name, QVariant *value) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2008-12-09 12:08:56 +01:00
										 |  |  |     QTC_ASSERT(m_debugMode, return); | 
					
						
							| 
									
										
										
										
											2009-01-13 18:15:24 +01:00
										 |  |  |     *value = settings()->value(name); | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void DebuggerPlugin::resetLocation() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     //qDebug() << "RESET_LOCATION: current:"  << currentTextEditor();
 | 
					
						
							|  |  |  |     //qDebug() << "RESET_LOCATION: locations:"  << m_locationMark;
 | 
					
						
							|  |  |  |     //qDebug() << "RESET_LOCATION: stored:"  << m_locationMark->editor();
 | 
					
						
							|  |  |  |     delete m_locationMark; | 
					
						
							|  |  |  |     m_locationMark = 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void DebuggerPlugin::gotoLocation(const QString &fileName, int lineNumber, | 
					
						
							|  |  |  |     bool setMarker) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     TextEditor::BaseTextEditor::openEditorAt(fileName, lineNumber); | 
					
						
							|  |  |  |     if (setMarker) { | 
					
						
							|  |  |  |         resetLocation(); | 
					
						
							|  |  |  |         m_locationMark = new LocationMark(fileName, lineNumber); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void DebuggerPlugin::changeStatus(int status) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     bool startIsContinue = (status == DebuggerInferiorStopped); | 
					
						
							| 
									
										
										
										
											2009-01-20 11:52:04 +01:00
										 |  |  |     ICore *core = ICore::instance(); | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |     if (startIsContinue) { | 
					
						
							|  |  |  |         core->addAdditionalContext(m_gdbRunningContext); | 
					
						
							|  |  |  |         core->updateContext(); | 
					
						
							|  |  |  |     } else { | 
					
						
							|  |  |  |         core->removeAdditionalContext(m_gdbRunningContext); | 
					
						
							|  |  |  |         core->updateContext(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-13 18:15:24 +01:00
										 |  |  | void DebuggerPlugin::writeSettings() const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     QTC_ASSERT(m_manager, return); | 
					
						
							|  |  |  |     QTC_ASSERT(m_manager->mainWindow(), return); | 
					
						
							| 
									
										
										
										
											2009-01-14 18:09:02 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     QSettings *s = settings(); | 
					
						
							| 
									
										
										
										
											2009-03-19 09:32:09 +01:00
										 |  |  |     theDebuggerSettings()->writeSettings(s); | 
					
						
							| 
									
										
										
										
											2009-01-13 18:15:24 +01:00
										 |  |  |     s->beginGroup(QLatin1String("DebugMode")); | 
					
						
							| 
									
										
										
										
											2009-01-14 18:09:02 +01:00
										 |  |  |     s->setValue("State", m_manager->mainWindow()->saveState()); | 
					
						
							|  |  |  |     s->setValue("Locked", m_toggleLockedAction->isChecked()); | 
					
						
							| 
									
										
										
										
											2009-01-13 18:15:24 +01:00
										 |  |  |     s->endGroup(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void DebuggerPlugin::readSettings() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     QSettings *s = settings(); | 
					
						
							| 
									
										
										
										
											2009-03-19 09:32:09 +01:00
										 |  |  |     theDebuggerSettings()->readSettings(s); | 
					
						
							| 
									
										
										
										
											2009-01-14 18:09:02 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     QString defaultCommand("gdb"); | 
					
						
							|  |  |  | #if defined(Q_OS_WIN32)
 | 
					
						
							|  |  |  |     defaultCommand.append(".exe"); | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2009-01-23 17:20:51 +01:00
										 |  |  |     //QString defaultScript = ICore::instance()->resourcePath() +
 | 
					
						
							|  |  |  |     //    QLatin1String("/gdb/qt4macros");
 | 
					
						
							|  |  |  |     QString defaultScript; | 
					
						
							| 
									
										
										
										
											2009-01-14 18:09:02 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-13 18:15:24 +01:00
										 |  |  |     s->beginGroup(QLatin1String("DebugMode")); | 
					
						
							| 
									
										
										
										
											2009-01-14 18:09:02 +01:00
										 |  |  |     QByteArray ba = s->value("State", QByteArray()).toByteArray(); | 
					
						
							|  |  |  |     m_toggleLockedAction->setChecked(s->value("Locked", true).toBool()); | 
					
						
							| 
									
										
										
										
											2009-01-13 18:15:24 +01:00
										 |  |  |     s->endGroup(); | 
					
						
							| 
									
										
										
										
											2009-01-14 18:09:02 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     m_manager->mainWindow()->restoreState(ba); | 
					
						
							| 
									
										
										
										
											2009-01-13 18:15:24 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void DebuggerPlugin::focusCurrentEditor(IMode *mode) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     if (mode != m_debugMode) | 
					
						
							|  |  |  |         return; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     EditorManager *editorManager = EditorManager::instance(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (editorManager->currentEditor()) | 
					
						
							|  |  |  |         editorManager->currentEditor()->widget()->setFocus(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-27 11:41:19 +01:00
										 |  |  | void DebuggerPlugin::showSettingsDialog() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2009-03-23 13:02:50 +01:00
										 |  |  |     Core::ICore::instance()->showOptionsDialog("Debugger", "General"); | 
					
						
							| 
									
										
										
										
											2009-02-27 11:41:19 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | #include "debuggerplugin.moc"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Q_EXPORT_PLUGIN(DebuggerPlugin) |