| 
									
										
										
										
											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
										 |  |  | ** | 
					
						
							| 
									
										
										
										
											2009-06-17 00:01:27 +10:00
										 |  |  | ** Contact: Nokia Corporation (qt-info@nokia.com) | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | ** | 
					
						
							| 
									
										
										
										
											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 | 
					
						
							| 
									
										
										
										
											2009-06-17 00:01:27 +10:00
										 |  |  | ** contact the sales department at http://www.qtsoftware.com/contact.
 | 
					
						
							| 
									
										
										
										
											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-04-28 15:08:52 +02:00
										 |  |  | #include "breakhandler.h"
 | 
					
						
							| 
									
										
										
										
											2009-03-17 17:00:06 +01:00
										 |  |  | #include "debuggeractions.h"
 | 
					
						
							| 
									
										
										
										
											2009-05-25 16:22:11 +02:00
										 |  |  | #include "debuggerdialogs.h"
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | #include "debuggerconstants.h"
 | 
					
						
							|  |  |  | #include "debuggermanager.h"
 | 
					
						
							|  |  |  | #include "debuggerrunner.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-17 09:03:32 +02:00
										 |  |  | #include "ui_commonoptionspage.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>
 | 
					
						
							| 
									
										
										
										
											2009-07-16 15:57:59 +02:00
										 |  |  | #include <utils/styledbar.h>
 | 
					
						
							| 
									
										
										
										
											2009-08-06 16:01:51 +02:00
										 |  |  | #include <utils/fancymainwindow.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>
 | 
					
						
							| 
									
										
										
										
											2009-04-17 09:03:32 +02:00
										 |  |  | #include <QtCore/QCoreApplication>
 | 
					
						
							| 
									
										
										
										
											2009-05-25 16:22:11 +02:00
										 |  |  | #include <QtCore/QTimer>
 | 
					
						
							| 
									
										
										
										
											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>
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | #include <QtGui/QPlainTextEdit>
 | 
					
						
							|  |  |  | #include <QtGui/QTextBlock>
 | 
					
						
							|  |  |  | #include <QtGui/QTextCursor>
 | 
					
						
							| 
									
										
										
										
											2009-05-25 16:22:11 +02:00
										 |  |  | #include <QtGui/QMessageBox>
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 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 { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-06-08 19:28:28 +02:00
										 |  |  | const char * const M_DEBUG_START_DEBUGGING = "QtCreator.Menu.Debug.StartDebugging"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | 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"; | 
					
						
							| 
									
										
										
										
											2009-05-07 17:11:19 +02:00
										 |  |  | const char * const ATTACHTCF            = "Debugger.AttachTcf"; | 
					
						
							| 
									
										
										
										
											2009-05-04 14:47:45 +02:00
										 |  |  | const char * const ATTACHREMOTE         = "Debugger.AttachRemote"; | 
					
						
							| 
									
										
										
										
											2009-05-07 15:20:44 +02:00
										 |  |  | const char * const DETACH               = "Debugger.Detach"; | 
					
						
							| 
									
										
										
										
											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"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-06-03 20:45:49 +02:00
										 |  |  | #ifdef Q_WS_MAC
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | 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"; | 
					
						
							| 
									
										
										
										
											2009-05-25 17:19:42 +02:00
										 |  |  | const char * const REVERSE_KEY              = ""; | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | 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                = ""; | 
					
						
							| 
									
										
										
										
											2009-05-25 17:19:42 +02:00
										 |  |  | const char * const REVERSE_KEY              = "F12"; | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | 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-04-28 15:08:52 +02:00
										 |  |  | static QSettings *settings() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return ICore::instance()->settings(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-07-16 15:57:59 +02:00
										 |  |  | static QToolButton *toolButton(QAction *action) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     QToolButton *button = new QToolButton; | 
					
						
							|  |  |  |     button->setDefaultAction(action); | 
					
						
							|  |  |  |     return button; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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(); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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 | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2009-05-19 15:33:17 +02:00
										 |  |  |     static const QIcon icon(":/debugger/images/location.svg"); | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |     return icon; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-14 18:09:02 +01:00
										 |  |  | } // namespace Internal
 | 
					
						
							|  |  |  | } // namespace Debugger
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ///////////////////////////////////////////////////////////////////////
 | 
					
						
							|  |  |  | //
 | 
					
						
							| 
									
										
										
										
											2009-04-17 09:03:32 +02:00
										 |  |  | // CommonOptionsPage
 | 
					
						
							| 
									
										
										
										
											2009-01-14 18:09:02 +01:00
										 |  |  | //
 | 
					
						
							|  |  |  | ///////////////////////////////////////////////////////////////////////
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace Debugger { | 
					
						
							|  |  |  | namespace Internal { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-17 09:03:32 +02:00
										 |  |  | class CommonOptionsPage : public Core::IOptionsPage | 
					
						
							| 
									
										
										
										
											2009-01-14 18:09:02 +01:00
										 |  |  | { | 
					
						
							|  |  |  |     Q_OBJECT | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | public: | 
					
						
							| 
									
										
										
										
											2009-04-17 09:03:32 +02:00
										 |  |  |     CommonOptionsPage() {} | 
					
						
							| 
									
										
										
										
											2009-01-14 18:09:02 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     // IOptionsPage
 | 
					
						
							| 
									
										
										
										
											2009-04-28 15:08:52 +02:00
										 |  |  |     QString id() const | 
					
						
							|  |  |  |         { return QLatin1String(Debugger::Constants::DEBUGGER_COMMON_SETTINGS_PAGE); } | 
					
						
							|  |  |  |     QString trName() const | 
					
						
							|  |  |  |         { return QCoreApplication::translate("Debugger", Debugger::Constants::DEBUGGER_COMMON_SETTINGS_PAGE); } | 
					
						
							|  |  |  |     QString category() const | 
					
						
							|  |  |  |         { return QLatin1String(Debugger::Constants::DEBUGGER_SETTINGS_CATEGORY);  } | 
					
						
							|  |  |  |     QString trCategory() const | 
					
						
							|  |  |  |         { return QCoreApplication::translate("Debugger", Debugger::Constants::DEBUGGER_SETTINGS_CATEGORY); } | 
					
						
							| 
									
										
										
										
											2009-01-14 18:09:02 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     QWidget *createPage(QWidget *parent); | 
					
						
							| 
									
										
										
										
											2009-04-28 15:08:52 +02:00
										 |  |  |     void apply() { m_group.apply(settings()); } | 
					
						
							| 
									
										
										
										
											2009-03-26 15:56:16 +01:00
										 |  |  |     void finish() { m_group.finish(); } | 
					
						
							| 
									
										
										
										
											2009-01-14 18:09:02 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | private: | 
					
						
							| 
									
										
										
										
											2009-04-17 09:03:32 +02:00
										 |  |  |     Ui::CommonOptionsPage m_ui; | 
					
						
							| 
									
										
										
										
											2009-03-26 17:27:44 +01:00
										 |  |  |     Core::Utils::SavedActionSet m_group; | 
					
						
							| 
									
										
										
										
											2009-01-14 18:09:02 +01:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-17 09:03:32 +02:00
										 |  |  | QWidget *CommonOptionsPage::createPage(QWidget *parent) | 
					
						
							| 
									
										
										
										
											2009-01-14 18:09:02 +01:00
										 |  |  | { | 
					
						
							|  |  |  |     QWidget *w = new QWidget(parent); | 
					
						
							|  |  |  |     m_ui.setupUi(w); | 
					
						
							| 
									
										
										
										
											2009-03-26 17:27:44 +01:00
										 |  |  |     m_group.clear(); | 
					
						
							| 
									
										
										
										
											2009-03-26 15:56:16 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-25 16:22:11 +02:00
										 |  |  |     m_group.insert(theDebuggerAction(ListSourceFiles), | 
					
						
							| 
									
										
										
										
											2009-03-26 17:27:44 +01:00
										 |  |  |         m_ui.checkBoxListSourceFiles); | 
					
						
							| 
									
										
										
										
											2009-05-25 16:22:11 +02:00
										 |  |  |     m_group.insert(theDebuggerAction(UseAlternatingRowColors), | 
					
						
							| 
									
										
										
										
											2009-05-05 10:14:35 +02:00
										 |  |  |         m_ui.checkBoxUseAlternatingRowColors); | 
					
						
							| 
									
										
										
										
											2009-05-25 16:22:11 +02:00
										 |  |  |     m_group.insert(theDebuggerAction(SkipKnownFrames), | 
					
						
							| 
									
										
										
										
											2009-03-26 15:56:16 +01:00
										 |  |  |         m_ui.checkBoxSkipKnownFrames); | 
					
						
							| 
									
										
										
										
											2009-05-25 16:22:11 +02:00
										 |  |  |     m_group.insert(theDebuggerAction(UseToolTips), | 
					
						
							| 
									
										
										
										
											2009-03-26 15:56:16 +01:00
										 |  |  |         m_ui.checkBoxUseToolTips); | 
					
						
							| 
									
										
										
										
											2009-05-25 17:19:42 +02:00
										 |  |  |     m_group.insert(theDebuggerAction(EnableReverseDebugging),  | 
					
						
							|  |  |  |         m_ui.checkBoxEnableReverseDebugging); | 
					
						
							|  |  |  |     m_group.insert(theDebuggerAction(MaximalStackDepth),  | 
					
						
							| 
									
										
										
										
											2009-04-02 15:06:24 +02:00
										 |  |  |         m_ui.spinBoxMaximalStackDepth); | 
					
						
							| 
									
										
										
										
											2009-01-14 18:09:02 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-06-04 16:15:01 +02:00
										 |  |  | #ifdef USE_REVERSE_DEBUGGING
 | 
					
						
							|  |  |  |     m_ui.checkBoxEnableReverseDebugging->hide(); | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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
										 |  |  | ///////////////////////////////////////////////////////////////////////
 | 
					
						
							|  |  |  | //
 | 
					
						
							| 
									
										
										
										
											2009-04-07 16:39:17 +02:00
										 |  |  | // DebuggingHelperOptionPage
 | 
					
						
							| 
									
										
										
										
											2009-03-23 12:28:02 +01:00
										 |  |  | //
 | 
					
						
							|  |  |  | ///////////////////////////////////////////////////////////////////////
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace Debugger { | 
					
						
							|  |  |  | namespace Internal { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-07 16:39:17 +02:00
										 |  |  | class DebuggingHelperOptionPage : public Core::IOptionsPage | 
					
						
							| 
									
										
										
										
											2009-03-23 12:28:02 +01:00
										 |  |  | { | 
					
						
							|  |  |  |     Q_OBJECT | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | public: | 
					
						
							| 
									
										
										
										
											2009-04-07 16:39:17 +02:00
										 |  |  |     DebuggingHelperOptionPage() {} | 
					
						
							| 
									
										
										
										
											2009-03-23 12:28:02 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     // IOptionsPage
 | 
					
						
							| 
									
										
										
										
											2009-04-07 16:39:17 +02:00
										 |  |  |     QString id() const { return QLatin1String("DebuggingHelper"); } | 
					
						
							|  |  |  |     QString trName() const { return tr("Debugging Helper"); } | 
					
						
							| 
									
										
										
										
											2009-04-17 09:03:32 +02:00
										 |  |  |     QString category() const { return QLatin1String(Debugger::Constants::DEBUGGER_SETTINGS_CATEGORY); } | 
					
						
							|  |  |  |     QString trCategory() const { return QCoreApplication::translate("Debugger", Debugger::Constants::DEBUGGER_SETTINGS_CATEGORY); } | 
					
						
							| 
									
										
										
										
											2009-03-23 12:28:02 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     QWidget *createPage(QWidget *parent); | 
					
						
							| 
									
										
										
										
											2009-04-28 15:08:52 +02:00
										 |  |  |     void apply() { m_group.apply(settings()); } | 
					
						
							| 
									
										
										
										
											2009-03-26 15:56:16 +01:00
										 |  |  |     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; | 
					
						
							| 
									
										
										
										
											2009-04-07 16:39:17 +02:00
										 |  |  |     Ui::DebuggingHelperOptionPage m_ui; | 
					
						
							| 
									
										
										
										
											2009-03-23 12:28:02 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-26 17:27:44 +01:00
										 |  |  |     Core::Utils::SavedActionSet m_group; | 
					
						
							| 
									
										
										
										
											2009-03-23 12:28:02 +01:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-07 16:39:17 +02:00
										 |  |  | QWidget *DebuggingHelperOptionPage::createPage(QWidget *parent) | 
					
						
							| 
									
										
										
										
											2009-03-23 12:28:02 +01:00
										 |  |  | { | 
					
						
							|  |  |  |     QWidget *w = new QWidget(parent); | 
					
						
							|  |  |  |     m_ui.setupUi(w); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     m_ui.dumperLocationChooser->setExpectedKind(Core::Utils::PathChooser::Command); | 
					
						
							| 
									
										
										
										
											2009-04-07 16:39:17 +02:00
										 |  |  |     m_ui.dumperLocationChooser->setPromptDialogTitle(tr("Choose DebuggingHelper 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-04-07 16:39:17 +02:00
										 |  |  |     connect(m_ui.checkBoxUseDebuggingHelpers, SIGNAL(toggled(bool)), | 
					
						
							| 
									
										
										
										
											2009-03-27 13:04:23 +01:00
										 |  |  |         this, SLOT(updateState())); | 
					
						
							| 
									
										
										
										
											2009-04-07 16:39:17 +02:00
										 |  |  |     connect(m_ui.checkBoxUseCustomDebuggingHelperLocation, SIGNAL(toggled(bool)), | 
					
						
							| 
									
										
										
										
											2009-03-27 13:04:23 +01:00
										 |  |  |         this, SLOT(updateState())); | 
					
						
							| 
									
										
										
										
											2009-03-23 14:34:01 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-26 17:27:44 +01:00
										 |  |  |     m_group.clear(); | 
					
						
							| 
									
										
										
										
											2009-04-07 16:39:17 +02:00
										 |  |  |     m_group.insert(theDebuggerAction(UseDebuggingHelpers), | 
					
						
							|  |  |  |         m_ui.checkBoxUseDebuggingHelpers); | 
					
						
							|  |  |  |     m_group.insert(theDebuggerAction(UseCustomDebuggingHelperLocation), | 
					
						
							|  |  |  |         m_ui.checkBoxUseCustomDebuggingHelperLocation); | 
					
						
							|  |  |  |     m_group.insert(theDebuggerAction(CustomDebuggingHelperLocation), | 
					
						
							| 
									
										
										
										
											2009-03-26 15:56:16 +01:00
										 |  |  |         m_ui.dumperLocationChooser); | 
					
						
							| 
									
										
										
										
											2009-03-23 12:28:02 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-07-10 14:38:36 +02:00
										 |  |  | #ifdef QT_DEBUG
 | 
					
						
							| 
									
										
										
										
											2009-04-07 16:39:17 +02:00
										 |  |  |     m_group.insert(theDebuggerAction(DebugDebuggingHelpers), | 
					
						
							|  |  |  |         m_ui.checkBoxDebugDebuggingHelpers); | 
					
						
							| 
									
										
										
										
											2009-07-10 14:38:36 +02:00
										 |  |  | #else
 | 
					
						
							|  |  |  |     m_ui.checkBoxDebugDebuggingHelpers->hide(); | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2009-03-23 12:28:02 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     m_ui.dumperLocationChooser-> | 
					
						
							| 
									
										
										
										
											2009-04-07 16:39:17 +02:00
										 |  |  |         setEnabled(theDebuggerAction(UseCustomDebuggingHelperLocation)->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
 | 
					
						
							| 
									
										
										
										
											2009-05-06 09:17:16 +02:00
										 |  |  |     updateState(); | 
					
						
							| 
									
										
										
										
											2009-03-23 12:28:02 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     return w; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-07 16:39:17 +02:00
										 |  |  | void DebuggingHelperOptionPage::updateState() | 
					
						
							| 
									
										
										
										
											2009-03-27 13:04:23 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2009-04-07 16:39:17 +02:00
										 |  |  |     m_ui.checkBoxUseCustomDebuggingHelperLocation->setEnabled( | 
					
						
							|  |  |  |         m_ui.checkBoxUseDebuggingHelpers->isChecked()); | 
					
						
							| 
									
										
										
										
											2009-05-06 09:17:16 +02:00
										 |  |  |     bool locationEnabled = m_ui.checkBoxUseDebuggingHelpers->isChecked() | 
					
						
							|  |  |  |          && m_ui.checkBoxUseCustomDebuggingHelperLocation->isChecked(); | 
					
						
							|  |  |  |     m_ui.dumperLocationChooser->setEnabled(locationEnabled); | 
					
						
							|  |  |  |     m_ui.dumperLocationLabel->setEnabled(locationEnabled); | 
					
						
							| 
									
										
										
										
											2009-03-27 13:04:23 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-23 12:28:02 +01:00
										 |  |  | } // namespace Internal
 | 
					
						
							|  |  |  | } // namespace Debugger
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | ///////////////////////////////////////////////////////////////////////
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // DebuggerPlugin
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | ///////////////////////////////////////////////////////////////////////
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-28 15:08:52 +02:00
										 |  |  | DebuggerPlugin::DebuggerPlugin() | 
					
						
							|  |  |  |   : m_manager(0), | 
					
						
							| 
									
										
										
										
											2009-04-17 09:03:32 +02:00
										 |  |  |     m_debugMode(0), | 
					
						
							|  |  |  |     m_locationMark(0), | 
					
						
							|  |  |  |     m_gdbRunningContext(0), | 
					
						
							| 
									
										
										
										
											2009-05-25 16:22:11 +02:00
										 |  |  |     m_cmdLineEnabledEngines(AllEngineTypes), | 
					
						
							|  |  |  |     m_cmdLineAttachPid(0), | 
					
						
							| 
									
										
										
										
											2009-05-26 16:27:24 +02:00
										 |  |  |     m_cmdLineWinCrashEvent(0), | 
					
						
							| 
									
										
										
										
											2009-04-28 15:08:52 +02:00
										 |  |  |     m_toggleLockedAction(0) | 
					
						
							|  |  |  | {} | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | DebuggerPlugin::~DebuggerPlugin() | 
					
						
							|  |  |  | {} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void DebuggerPlugin::shutdown() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											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(); | 
					
						
							| 
									
										
										
										
											2009-06-03 13:53:45 +02:00
										 |  |  |     delete DebuggerSettings::instance(); | 
					
						
							| 
									
										
										
										
											2009-01-13 18:15:24 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |     //qDebug() << "DebuggerPlugin::~DebuggerPlugin";
 | 
					
						
							|  |  |  |     removeObject(m_debugMode); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // FIXME: when using the line below, BreakWindow etc gets deleted twice.
 | 
					
						
							|  |  |  |     // so better leak for now...
 | 
					
						
							|  |  |  |     delete m_debugMode; | 
					
						
							|  |  |  |     m_debugMode = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     delete m_locationMark; | 
					
						
							|  |  |  |     m_locationMark = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     delete m_manager; | 
					
						
							|  |  |  |     m_manager = 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-25 16:22:11 +02:00
										 |  |  | static inline QString msgParameterMissing(const QString &a) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return DebuggerPlugin::tr("Option '%1' is missing the parameter.").arg(a); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static inline QString msgInvalidNumericParameter(const QString &a, const QString &number) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return DebuggerPlugin::tr("The parameter '%1' of option '%2' is not a number.").arg(number, a); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Parse arguments
 | 
					
						
							|  |  |  | bool DebuggerPlugin::parseArgument(QStringList::const_iterator &it, | 
					
						
							|  |  |  |                                    const QStringList::const_iterator& cend, | 
					
						
							|  |  |  |                                    QString *errorMessage) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     const QString &option = *it; | 
					
						
							|  |  |  |     // '-debug <pid>'
 | 
					
						
							|  |  |  |     if (*it == QLatin1String("-debug")) { | 
					
						
							|  |  |  |         ++it; | 
					
						
							|  |  |  |         if (it == cend) { | 
					
						
							|  |  |  |             *errorMessage = msgParameterMissing(*it); | 
					
						
							|  |  |  |             return false; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         bool ok; | 
					
						
							|  |  |  |         m_cmdLineAttachPid = it->toULongLong(&ok); | 
					
						
							|  |  |  |         if (!ok) { | 
					
						
							|  |  |  |             *errorMessage = msgInvalidNumericParameter(option, *it); | 
					
						
							|  |  |  |             return false; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2009-05-26 16:27:24 +02:00
										 |  |  |     // -wincrashevent <event-handle>. A handle used for
 | 
					
						
							|  |  |  |     // a handshake when attaching to a crashed Windows process.
 | 
					
						
							|  |  |  |     if (*it == QLatin1String("-wincrashevent")) { | 
					
						
							| 
									
										
										
										
											2009-05-25 16:22:11 +02:00
										 |  |  |         ++it; | 
					
						
							|  |  |  |         if (it == cend) { | 
					
						
							|  |  |  |             *errorMessage = msgParameterMissing(*it); | 
					
						
							|  |  |  |             return false; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         bool ok; | 
					
						
							| 
									
										
										
										
											2009-05-26 16:27:24 +02:00
										 |  |  |         m_cmdLineWinCrashEvent = it->toULongLong(&ok); | 
					
						
							| 
									
										
										
										
											2009-05-25 16:22:11 +02:00
										 |  |  |         if (!ok) { | 
					
						
							|  |  |  |             *errorMessage = msgInvalidNumericParameter(option, *it); | 
					
						
							|  |  |  |             return false; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     // engine disabling
 | 
					
						
							|  |  |  |     if (option == QLatin1String("-disable-cdb")) { | 
					
						
							|  |  |  |         m_cmdLineEnabledEngines &= ~CdbEngineType; | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     if (option == QLatin1String("-disable-gdb")) { | 
					
						
							|  |  |  |         m_cmdLineEnabledEngines &= ~GdbEngineType; | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     if (option == QLatin1String("-disable-sdb")) { | 
					
						
							|  |  |  |         m_cmdLineEnabledEngines &= ~ScriptEngineType; | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     if (option == QLatin1String("-disable-tcf")) { | 
					
						
							|  |  |  |         m_cmdLineEnabledEngines &= ~TcfEngineType; | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     *errorMessage = tr("Invalid debugger option: %1").arg(option); | 
					
						
							|  |  |  |     return false; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | bool DebuggerPlugin::parseArguments(const QStringList &args, QString *errorMessage) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     const QStringList::const_iterator cend = args.constEnd(); | 
					
						
							|  |  |  |     for (QStringList::const_iterator it = args.constBegin(); it != cend; ++it) | 
					
						
							|  |  |  |         if (!parseArgument(it, cend, errorMessage)) | 
					
						
							|  |  |  |             return false; | 
					
						
							|  |  |  |     if (Debugger::Constants::Internal::debug) | 
					
						
							|  |  |  |         qDebug().nospace() << args << "engines=0x" << QString::number(m_cmdLineEnabledEngines, 16) << " pid" << m_cmdLineAttachPid << '\n'; | 
					
						
							|  |  |  |     return true; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-16 14:22:13 +01:00
										 |  |  | bool DebuggerPlugin::initialize(const QStringList &arguments, QString *errorMessage) | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2009-05-26 16:27:24 +02:00
										 |  |  |     // Do not fail the whole plugin if something goes wrong here
 | 
					
						
							|  |  |  |     if (!parseArguments(arguments, errorMessage)) { | 
					
						
							|  |  |  |         *errorMessage = tr("Error evaluating command line arguments: %1").arg(*errorMessage); | 
					
						
							|  |  |  |         qWarning("%s\n", qPrintable(*errorMessage)); | 
					
						
							|  |  |  |         errorMessage->clear(); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-17 09:03:32 +02:00
										 |  |  |     m_manager = new DebuggerManager; | 
					
						
							| 
									
										
										
										
											2009-05-25 16:22:11 +02:00
										 |  |  |     const QList<Core::IOptionsPage *> engineOptionPages = m_manager->initializeEngines(m_cmdLineEnabledEngines); | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											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); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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-05-05 17:48:54 +02:00
										 |  |  |     // External apps
 | 
					
						
							|  |  |  |     m_startExternalAction = new QAction(this); | 
					
						
							|  |  |  |     m_startExternalAction->setText(tr("Start and Debug External Application...")); | 
					
						
							|  |  |  |     connect(m_startExternalAction, SIGNAL(triggered()), | 
					
						
							|  |  |  |         this, SLOT(startExternalApplication())); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     m_attachExternalAction = new QAction(this); | 
					
						
							|  |  |  |     m_attachExternalAction->setText(tr("Attach to Running External Application...")); | 
					
						
							|  |  |  |     connect(m_attachExternalAction, SIGNAL(triggered()), | 
					
						
							|  |  |  |         this, SLOT(attachExternalApplication())); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     m_attachCoreAction = new QAction(this); | 
					
						
							|  |  |  |     m_attachCoreAction->setText(tr("Attach to Core...")); | 
					
						
							|  |  |  |     connect(m_attachCoreAction, SIGNAL(triggered()), this, SLOT(attachCore())); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-07 17:11:19 +02:00
										 |  |  |     m_attachTcfAction = new QAction(this); | 
					
						
							| 
									
										
										
										
											2009-05-08 15:37:41 +02:00
										 |  |  |     m_attachTcfAction->setText(tr("Attach to Running Tcf Agent...")); | 
					
						
							| 
									
										
										
										
											2009-05-07 17:11:19 +02:00
										 |  |  |     m_attachTcfAction->setToolTip(tr("This attaches to a running " | 
					
						
							|  |  |  |         "'Target Communication Framework' agent.")); | 
					
						
							|  |  |  |     connect(m_attachTcfAction, SIGNAL(triggered()), | 
					
						
							|  |  |  |         this, SLOT(attachRemoteTcf())); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-06 13:27:11 +02:00
										 |  |  |     m_startRemoteAction = new QAction(this); | 
					
						
							|  |  |  |     m_startRemoteAction->setText(tr("Start and Attach to Remote Application...")); | 
					
						
							|  |  |  |     connect(m_startRemoteAction, SIGNAL(triggered()), | 
					
						
							|  |  |  |         this, SLOT(startRemoteApplication())); | 
					
						
							| 
									
										
										
										
											2009-05-05 17:48:54 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-07 15:20:44 +02:00
										 |  |  |     m_detachAction = new QAction(this); | 
					
						
							| 
									
										
										
										
											2009-06-11 15:00:21 +02:00
										 |  |  |     m_detachAction->setText(tr("Detach Debugger")); | 
					
						
							| 
									
										
										
										
											2009-05-07 15:20:44 +02:00
										 |  |  |     connect(m_detachAction, SIGNAL(triggered()), | 
					
						
							|  |  |  |         m_manager, SLOT(detachDebugger())); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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-06-08 19:28:28 +02:00
										 |  |  |     Core::ActionContainer *mstart = | 
					
						
							|  |  |  |         am->actionContainer(ProjectExplorer::Constants::M_DEBUG_STARTDEBUGGING); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-14 13:17:53 +01:00
										 |  |  |     Core::Command *cmd = 0; | 
					
						
							| 
									
										
										
										
											2009-06-04 16:06:12 +02:00
										 |  |  |     cmd = am->registerAction(m_manager->m_continueAction, | 
					
						
							|  |  |  |         ProjectExplorer::Constants::DEBUG, QList<int>() << m_gdbRunningContext); | 
					
						
							| 
									
										
										
										
											2009-06-08 19:28:28 +02:00
										 |  |  |     mstart->addAction(cmd, Core::Constants::G_DEFAULT_ONE); | 
					
						
							| 
									
										
										
										
											2009-06-04 16:06:12 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-05 17:48:54 +02:00
										 |  |  |     cmd = am->registerAction(m_startExternalAction, | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |         Constants::STARTEXTERNAL, globalcontext); | 
					
						
							| 
									
										
										
										
											2009-06-08 19:28:28 +02:00
										 |  |  |     mstart->addAction(cmd, Core::Constants::G_DEFAULT_ONE); | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-05 17:48:54 +02:00
										 |  |  |     cmd = am->registerAction(m_attachExternalAction, | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |         Constants::ATTACHEXTERNAL, globalcontext); | 
					
						
							| 
									
										
										
										
											2009-06-08 19:28:28 +02:00
										 |  |  |     mstart->addAction(cmd, Core::Constants::G_DEFAULT_ONE); | 
					
						
							| 
									
										
										
										
											2009-03-02 15:14:12 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-05 17:48:54 +02:00
										 |  |  |     cmd = am->registerAction(m_attachCoreAction, | 
					
						
							|  |  |  |         Constants::ATTACHCORE, globalcontext); | 
					
						
							| 
									
										
										
										
											2009-06-08 19:28:28 +02:00
										 |  |  |     mstart->addAction(cmd, Core::Constants::G_DEFAULT_ONE); | 
					
						
							| 
									
										
										
										
											2009-06-04 16:06:12 +02:00
										 |  |  | /*
 | 
					
						
							| 
									
										
										
										
											2009-05-07 17:11:19 +02:00
										 |  |  |     cmd = am->registerAction(m_attachTcfAction, | 
					
						
							|  |  |  |         Constants::ATTACHTCF, globalcontext); | 
					
						
							|  |  |  |     mdebug->addAction(cmd, Core::Constants::G_DEFAULT_ONE); | 
					
						
							| 
									
										
										
										
											2009-06-04 16:06:12 +02:00
										 |  |  | */ | 
					
						
							| 
									
										
										
										
											2009-05-07 17:11:19 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-06 13:27:11 +02:00
										 |  |  |     cmd = am->registerAction(m_startRemoteAction, | 
					
						
							| 
									
										
										
										
											2009-05-05 17:48:54 +02:00
										 |  |  |         Constants::ATTACHREMOTE, globalcontext); | 
					
						
							| 
									
										
										
										
											2009-06-08 19:28:28 +02:00
										 |  |  |     mstart->addAction(cmd, Core::Constants::G_DEFAULT_ONE); | 
					
						
							| 
									
										
										
										
											2009-05-04 14:47:45 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-07 15:20:44 +02:00
										 |  |  |     cmd = am->registerAction(m_detachAction, | 
					
						
							|  |  |  |         Constants::DETACH, 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_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-07-09 18:27:56 +02:00
										 |  |  |     cmd = am->registerAction(sep, QLatin1String("Debugger.Sep.Step"), 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); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-06-04 16:15:01 +02:00
										 |  |  | #ifdef USE_REVERSE_DEBUGGING
 | 
					
						
							| 
									
										
										
										
											2009-05-25 17:19:42 +02:00
										 |  |  |     cmd = am->registerAction(m_manager->m_reverseDirectionAction, | 
					
						
							|  |  |  |         Constants::REVERSE, debuggercontext); | 
					
						
							|  |  |  |     cmd->setDefaultKeySequence(QKeySequence(Constants::REVERSE_KEY)); | 
					
						
							|  |  |  |     mdebug->addAction(cmd); | 
					
						
							| 
									
										
										
										
											2009-06-04 16:15:01 +02:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2009-05-25 17:19:42 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |     sep = new QAction(this); | 
					
						
							|  |  |  |     sep->setSeparator(true); | 
					
						
							| 
									
										
										
										
											2009-07-09 18:27:56 +02:00
										 |  |  |     cmd = am->registerAction(sep, QLatin1String("Debugger.Sep.Break"), 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);
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     sep = new QAction(this); | 
					
						
							|  |  |  |     sep->setSeparator(true); | 
					
						
							| 
									
										
										
										
											2009-07-09 18:27:56 +02:00
										 |  |  |     cmd = am->registerAction(sep, QLatin1String("Debugger.Sep.Watch"), 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
 | 
					
						
							| 
									
										
										
										
											2009-07-09 18:27:56 +02:00
										 |  |  |     cmd = am->registerAction(sep, QLatin1String("Debugger.Sep.Views"), globalcontext); | 
					
						
							| 
									
										
										
										
											2009-01-13 17:41:23 +01:00
										 |  |  |     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)), | 
					
						
							| 
									
										
										
										
											2009-08-06 16:01:51 +02:00
										 |  |  |         m_manager->mainWindow(), SLOT(setLocked(bool))); | 
					
						
							|  |  |  |     foreach (QDockWidget *dockWidget, m_manager->mainWindow()->dockWidgets()) { | 
					
						
							| 
									
										
										
										
											2009-01-13 17:41:23 +01:00
										 |  |  |         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-04-09 16:51:13 +02:00
										 |  |  |     connect(theDebuggerAction(FormatHexadecimal), SIGNAL(triggered()), | 
					
						
							|  |  |  |         m_manager, SLOT(reloadRegisters())); | 
					
						
							|  |  |  |     connect(theDebuggerAction(FormatDecimal), SIGNAL(triggered()), | 
					
						
							|  |  |  |         m_manager, SLOT(reloadRegisters())); | 
					
						
							|  |  |  |     connect(theDebuggerAction(FormatOctal), SIGNAL(triggered()), | 
					
						
							|  |  |  |         m_manager, SLOT(reloadRegisters())); | 
					
						
							|  |  |  |     connect(theDebuggerAction(FormatBinary), SIGNAL(triggered()), | 
					
						
							|  |  |  |         m_manager, SLOT(reloadRegisters())); | 
					
						
							|  |  |  |     connect(theDebuggerAction(FormatRaw), SIGNAL(triggered()), | 
					
						
							|  |  |  |         m_manager, SLOT(reloadRegisters())); | 
					
						
							|  |  |  |     connect(theDebuggerAction(FormatNatural), SIGNAL(triggered()), | 
					
						
							|  |  |  |         m_manager, SLOT(reloadRegisters())); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-28 12:15:40 +01:00
										 |  |  |    // FIXME:
 | 
					
						
							| 
									
										
										
										
											2009-04-17 09:03:32 +02:00
										 |  |  |     addAutoReleasedObject(new CommonOptionsPage); | 
					
						
							| 
									
										
										
										
											2009-05-25 16:22:11 +02:00
										 |  |  |     addAutoReleasedObject(new DebuggingHelperOptionPage); | 
					
						
							| 
									
										
										
										
											2009-04-17 09:03:32 +02:00
										 |  |  |     foreach (Core::IOptionsPage* op, engineOptionPages) | 
					
						
							|  |  |  |         addAutoReleasedObject(op); | 
					
						
							| 
									
										
										
										
											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);
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-05 17:48:54 +02:00
										 |  |  |     // register factory of DebuggerRunControl
 | 
					
						
							|  |  |  |     m_debuggerRunner = new DebuggerRunner(m_manager); | 
					
						
							|  |  |  |     addAutoReleasedObject(m_debuggerRunner); | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											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); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     QWidget *editorAndFindWidget = new QWidget; | 
					
						
							|  |  |  |     editorAndFindWidget->setLayout(editorHolderLayout); | 
					
						
							| 
									
										
										
										
											2009-07-21 11:10:02 +02:00
										 |  |  |     editorHolderLayout->addWidget(new EditorManagerPlaceHolder(m_debugMode)); | 
					
						
							|  |  |  |     editorHolderLayout->addWidget(new FindToolBarPlaceHolder(editorAndFindWidget)); | 
					
						
							| 
									
										
										
										
											2009-01-13 18:15:24 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     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); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-07-16 15:57:59 +02:00
										 |  |  |     Core::Utils::StyledBar *debugToolBar = new Core::Utils::StyledBar; | 
					
						
							| 
									
										
										
										
											2009-02-04 12:46:38 +01:00
										 |  |  |     debugToolBar->setProperty("topBorder", true); | 
					
						
							| 
									
										
										
										
											2009-07-16 15:57:59 +02:00
										 |  |  |     QHBoxLayout *debugToolBarLayout = new QHBoxLayout(debugToolBar); | 
					
						
							|  |  |  |     debugToolBarLayout->setMargin(0); | 
					
						
							|  |  |  |     debugToolBarLayout->setSpacing(0); | 
					
						
							|  |  |  |     debugToolBarLayout->addWidget(toolButton(am->command(ProjectExplorer::Constants::DEBUG)->action())); | 
					
						
							|  |  |  |     debugToolBarLayout->addWidget(toolButton(am->command(Constants::INTERRUPT)->action())); | 
					
						
							|  |  |  |     debugToolBarLayout->addWidget(toolButton(am->command(Constants::NEXT)->action())); | 
					
						
							|  |  |  |     debugToolBarLayout->addWidget(toolButton(am->command(Constants::STEP)->action())); | 
					
						
							|  |  |  |     debugToolBarLayout->addWidget(toolButton(am->command(Constants::STEPOUT)->action())); | 
					
						
							|  |  |  |     debugToolBarLayout->addWidget(new Core::Utils::StyledSeparator); | 
					
						
							|  |  |  |     debugToolBarLayout->addWidget(toolButton(am->command(Constants::STEPI)->action())); | 
					
						
							|  |  |  |     debugToolBarLayout->addWidget(toolButton(am->command(Constants::NEXTI)->action())); | 
					
						
							| 
									
										
										
										
											2009-06-04 16:15:01 +02:00
										 |  |  | #ifdef USE_REVERSE_DEBUGGING
 | 
					
						
							| 
									
										
										
										
											2009-07-16 15:57:59 +02:00
										 |  |  |     debugToolBarLayout->addWidget(new Core::Utils::StyledSeparator); | 
					
						
							|  |  |  |     debugToolBarLayout->addWidget(toolButton(am->command(Constants::REVERSE)->action())); | 
					
						
							| 
									
										
										
										
											2009-06-04 16:15:01 +02:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2009-07-16 15:57:59 +02:00
										 |  |  |     debugToolBarLayout->addWidget(new Core::Utils::StyledSeparator); | 
					
						
							|  |  |  |     debugToolBarLayout->addWidget(new QLabel(tr("Threads:"))); | 
					
						
							| 
									
										
										
										
											2009-01-13 18:15:24 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     QComboBox *threadBox = new QComboBox; | 
					
						
							|  |  |  |     threadBox->setModel(m_manager->threadsModel()); | 
					
						
							|  |  |  |     connect(threadBox, SIGNAL(activated(int)), | 
					
						
							|  |  |  |         m_manager->threadsWindow(), SIGNAL(threadSelected(int))); | 
					
						
							| 
									
										
										
										
											2009-07-16 15:57:59 +02:00
										 |  |  |     debugToolBarLayout->addWidget(threadBox); | 
					
						
							|  |  |  |     debugToolBarLayout->addWidget(m_manager->statusLabel(), 10); | 
					
						
							| 
									
										
										
										
											2009-01-13 18:15:24 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     QBoxLayout *toolBarAddingLayout = new QVBoxLayout(centralWidget); | 
					
						
							|  |  |  |     toolBarAddingLayout->setMargin(0); | 
					
						
							|  |  |  |     toolBarAddingLayout->setSpacing(0); | 
					
						
							|  |  |  |     toolBarAddingLayout->addWidget(rightPaneSplitter); | 
					
						
							|  |  |  |     toolBarAddingLayout->addWidget(debugToolBar); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     m_manager->setSimpleDockWidgetArrangement(); | 
					
						
							|  |  |  |     readSettings(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     connect(ModeManager::instance(), SIGNAL(currentModeChanged(Core::IMode*)), | 
					
						
							| 
									
										
										
										
											2009-05-15 16:54:54 +02:00
										 |  |  |             this, SLOT(onModeChanged(Core::IMode*))); | 
					
						
							| 
									
										
										
										
											2009-01-13 18:15:24 +01:00
										 |  |  |     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(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-05-07 15:20:44 +02:00
										 |  |  |     connect(m_manager, SIGNAL(statusChanged(int)), | 
					
						
							|  |  |  |         this, SLOT(updateActions(int))); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											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-05-25 16:22:11 +02:00
										 |  |  |     const QByteArray env = qgetenv("QTC_DEBUGGER_TEST"); | 
					
						
							| 
									
										
										
										
											2009-04-07 09:40:56 +02:00
										 |  |  |     //qDebug() << "EXTENSIONS INITIALIZED:" << env;
 | 
					
						
							| 
									
										
										
										
											2009-04-06 16:30:11 +02:00
										 |  |  |     if (!env.isEmpty()) | 
					
						
							|  |  |  |         m_manager->runTest(QString::fromLocal8Bit(env)); | 
					
						
							| 
									
										
										
										
											2009-05-25 16:22:11 +02:00
										 |  |  |     if (m_cmdLineAttachPid) | 
					
						
							|  |  |  |         QTimer::singleShot(0, this, SLOT(attachCmdLinePid())); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void DebuggerPlugin::attachCmdLinePid() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2009-05-26 16:27:24 +02:00
										 |  |  |     m_manager->showStatusMessage(tr("Attaching to PID %1.").arg(m_cmdLineAttachPid)); | 
					
						
							|  |  |  |     const QString crashParameter = m_cmdLineWinCrashEvent ? QString::number(m_cmdLineWinCrashEvent) : QString(); | 
					
						
							|  |  |  |     attachExternalApplication(m_cmdLineAttachPid, crashParameter); | 
					
						
							| 
									
										
										
										
											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) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2009-04-28 15:08:52 +02:00
										 |  |  |     QString fileName = editor->file()->fileName(); | 
					
						
							|  |  |  |     QString position = fileName + QString(":%1").arg(lineNumber); | 
					
						
							|  |  |  |     BreakpointData *data = m_manager->findBreakpoint(fileName, lineNumber); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (data) { | 
					
						
							|  |  |  |         // existing breakpoint
 | 
					
						
							|  |  |  |         QAction *act = new QAction(tr("Remove Breakpoint"), menu); | 
					
						
							|  |  |  |         act->setData(position); | 
					
						
							|  |  |  |         connect(act, SIGNAL(triggered()), | 
					
						
							|  |  |  |             this, SLOT(breakpointSetRemoveMarginActionTriggered())); | 
					
						
							|  |  |  |         menu->addAction(act); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         QAction *act2; | 
					
						
							|  |  |  |         if (data->enabled) | 
					
						
							|  |  |  |             act2 = new QAction(tr("Disable Breakpoint"), menu); | 
					
						
							|  |  |  |         else | 
					
						
							|  |  |  |             act2 = new QAction(tr("Enable Breakpoint"), menu); | 
					
						
							|  |  |  |         act2->setData(position); | 
					
						
							|  |  |  |         connect(act2, SIGNAL(triggered()), | 
					
						
							|  |  |  |             this, SLOT(breakpointEnableDisableMarginActionTriggered())); | 
					
						
							|  |  |  |         menu->addAction(act2); | 
					
						
							|  |  |  |     } else { | 
					
						
							|  |  |  |         // non-existing
 | 
					
						
							|  |  |  |         QAction *act = new QAction(tr("Set Breakpoint"), menu); | 
					
						
							|  |  |  |         act->setData(position); | 
					
						
							|  |  |  |         connect(act, SIGNAL(triggered()), | 
					
						
							|  |  |  |             this, SLOT(breakpointSetRemoveMarginActionTriggered())); | 
					
						
							|  |  |  |         menu->addAction(act); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void DebuggerPlugin::breakpointSetRemoveMarginActionTriggered() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     if (QAction *act = qobject_cast<QAction *>(sender())) { | 
					
						
							|  |  |  |         QString str = act->data().toString(); | 
					
						
							|  |  |  |         int pos = str.lastIndexOf(':'); | 
					
						
							|  |  |  |         m_manager->toggleBreakpoint(str.left(pos), str.mid(pos + 1).toInt()); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2008-12-05 16:39:33 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-28 15:08:52 +02:00
										 |  |  | void DebuggerPlugin::breakpointEnableDisableMarginActionTriggered() | 
					
						
							| 
									
										
										
										
											2008-12-05 16:39:33 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2009-04-28 15:08:52 +02:00
										 |  |  |     if (QAction *act = qobject_cast<QAction *>(sender())) { | 
					
						
							|  |  |  |         QString str = act->data().toString(); | 
					
						
							|  |  |  |         int pos = str.lastIndexOf(':'); | 
					
						
							|  |  |  |         m_manager->toggleBreakpointEnabled(str.left(pos), str.mid(pos + 1).toInt()); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2008-12-05 16:39:33 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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-05-14 14:29:37 +02:00
										 |  |  |     if (!theDebuggerBoolSetting(UseToolTips) || m_manager->status() == DebuggerProcessNotReady) | 
					
						
							| 
									
										
										
										
											2008-12-08 19:26:00 +01:00
										 |  |  |         return; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-14 14:29:37 +02:00
										 |  |  |     m_manager->setToolTipExpression(point, editor, pos); | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-25 16:22:11 +02:00
										 |  |  | QVariant DebuggerPlugin::configValue(const QString &name) const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     QTC_ASSERT(m_debugMode, return QVariant()); | 
					
						
							|  |  |  |     return settings()->value(name); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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-04-08 12:11:30 +02:00
										 |  |  |     DebuggerSettings::instance()->writeSettings(s); | 
					
						
							| 
									
										
										
										
											2009-01-13 18:15:24 +01:00
										 |  |  |     s->beginGroup(QLatin1String("DebugMode")); | 
					
						
							| 
									
										
										
										
											2009-08-06 16:01:51 +02:00
										 |  |  |     m_manager->mainWindow()->saveSettings(s); | 
					
						
							| 
									
										
										
										
											2009-01-13 18:15:24 +01:00
										 |  |  |     s->endGroup(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void DebuggerPlugin::readSettings() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     QSettings *s = settings(); | 
					
						
							| 
									
										
										
										
											2009-04-08 12:11:30 +02:00
										 |  |  |     DebuggerSettings::instance()->readSettings(s); | 
					
						
							| 
									
										
										
										
											2009-01-14 18:09:02 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     QString defaultCommand("gdb"); | 
					
						
							| 
									
										
										
										
											2009-06-03 20:45:49 +02:00
										 |  |  | #ifdef Q_OS_WIN
 | 
					
						
							| 
									
										
										
										
											2009-01-14 18:09:02 +01:00
										 |  |  |     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-08-06 16:01:51 +02:00
										 |  |  |     m_manager->mainWindow()->restoreSettings(s); | 
					
						
							|  |  |  |     m_toggleLockedAction->setChecked(m_manager->mainWindow()->isLocked()); | 
					
						
							| 
									
										
										
										
											2009-01-13 18:15:24 +01:00
										 |  |  |     s->endGroup(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-15 16:54:54 +02:00
										 |  |  | void DebuggerPlugin::onModeChanged(IMode *mode) | 
					
						
							| 
									
										
										
										
											2009-01-13 18:15:24 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2009-05-25 18:21:31 +02:00
										 |  |  |      // FIXME: This one gets always called, even if switching between modes
 | 
					
						
							|  |  |  |      //        different then the debugger mode. E.g. Welcome and Help mode and
 | 
					
						
							|  |  |  |      //        also on shutdown.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-15 16:54:54 +02:00
										 |  |  |     if (mode != m_debugMode) { | 
					
						
							| 
									
										
										
										
											2009-01-13 18:15:24 +01:00
										 |  |  |         return; | 
					
						
							| 
									
										
										
										
											2009-05-15 16:54:54 +02:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2009-01-13 18:15:24 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     EditorManager *editorManager = EditorManager::instance(); | 
					
						
							|  |  |  |     if (editorManager->currentEditor()) | 
					
						
							|  |  |  |         editorManager->currentEditor()->widget()->setFocus(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-27 11:41:19 +01:00
										 |  |  | void DebuggerPlugin::showSettingsDialog() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2009-04-28 15:08:52 +02:00
										 |  |  |     Core::ICore::instance()->showOptionsDialog( | 
					
						
							|  |  |  |         QLatin1String(Debugger::Constants::DEBUGGER_SETTINGS_CATEGORY), | 
					
						
							|  |  |  |         QLatin1String(Debugger::Constants::DEBUGGER_COMMON_SETTINGS_PAGE)); | 
					
						
							| 
									
										
										
										
											2009-02-27 11:41:19 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-05 17:48:54 +02:00
										 |  |  | static QSharedPointer<RunConfiguration> activeRunConfiguration() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     ProjectExplorer::Project *project = | 
					
						
							|  |  |  |         ProjectExplorerPlugin::instance()->currentProject(); | 
					
						
							|  |  |  |     if (project) | 
					
						
							|  |  |  |         return project->activeRunConfiguration(); | 
					
						
							|  |  |  |     return QSharedPointer<RunConfiguration>(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void DebuggerPlugin::startExternalApplication() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2009-05-25 16:22:11 +02:00
										 |  |  |     const QSharedPointer<DebuggerStartParameters> sp(new DebuggerStartParameters); | 
					
						
							|  |  |  |     StartExternalDialog dlg(m_manager->mainWindow()); | 
					
						
							|  |  |  |     dlg.setExecutableFile( | 
					
						
							|  |  |  |             configValue(_("LastExternalExecutableFile")).toString()); | 
					
						
							|  |  |  |     dlg.setExecutableArguments( | 
					
						
							|  |  |  |             configValue(_("LastExternalExecutableArguments")).toString()); | 
					
						
							| 
									
										
										
										
											2009-06-12 12:57:22 +02:00
										 |  |  |     if (dlg.exec() != QDialog::Accepted) | 
					
						
							| 
									
										
										
										
											2009-05-25 16:22:11 +02:00
										 |  |  |         return; | 
					
						
							| 
									
										
										
										
											2009-06-12 12:57:22 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-25 16:22:11 +02:00
										 |  |  |     setConfigValue(_("LastExternalExecutableFile"), | 
					
						
							|  |  |  |                    dlg.executableFile()); | 
					
						
							|  |  |  |     setConfigValue(_("LastExternalExecutableArguments"), | 
					
						
							|  |  |  |                    dlg.executableArguments()); | 
					
						
							|  |  |  |     sp->executable = dlg.executableFile(); | 
					
						
							| 
									
										
										
										
											2009-06-16 13:44:45 +02:00
										 |  |  |     if (!dlg.executableArguments().isEmpty()) | 
					
						
							|  |  |  |         sp->processArgs = dlg.executableArguments().split(QLatin1Char(' ')); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-06-12 12:57:22 +02:00
										 |  |  |     if (dlg.breakAtMain()) | 
					
						
							|  |  |  |         m_manager->breakByFunctionMain(); | 
					
						
							| 
									
										
										
										
											2009-05-25 16:22:11 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-05 17:48:54 +02:00
										 |  |  |     QSharedPointer<RunConfiguration> rc = activeRunConfiguration(); | 
					
						
							| 
									
										
										
										
											2009-07-28 09:10:35 +02:00
										 |  |  |     if (rc.isNull()) | 
					
						
							|  |  |  |         rc = DebuggerRunner::createDefaultRunConfiguration(sp->executable); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-05 17:48:54 +02:00
										 |  |  |     if (RunControl *runControl = m_debuggerRunner | 
					
						
							| 
									
										
										
										
											2009-05-25 16:22:11 +02:00
										 |  |  |             ->run(rc, ProjectExplorer::Constants::DEBUGMODE, sp, StartExternal)) | 
					
						
							| 
									
										
										
										
											2009-05-05 17:48:54 +02:00
										 |  |  |         runControl->start(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void DebuggerPlugin::attachExternalApplication() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2009-05-25 16:22:11 +02:00
										 |  |  |     AttachExternalDialog dlg(m_manager->mainWindow()); | 
					
						
							|  |  |  |     if (dlg.exec() == QDialog::Accepted) | 
					
						
							|  |  |  |         attachExternalApplication(dlg.attachPID()); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-26 16:27:24 +02:00
										 |  |  | void DebuggerPlugin::attachExternalApplication(qint64 pid, const QString &crashParameter) | 
					
						
							| 
									
										
										
										
											2009-05-25 16:22:11 +02:00
										 |  |  | { | 
					
						
							|  |  |  |     if (pid == 0) { | 
					
						
							|  |  |  |         QMessageBox::warning(m_manager->mainWindow(), tr("Warning"), tr("Cannot attach to PID 0")); | 
					
						
							|  |  |  |         return; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     const QSharedPointer<DebuggerStartParameters> sp(new DebuggerStartParameters); | 
					
						
							|  |  |  |     sp->attachPID = pid; | 
					
						
							| 
									
										
										
										
											2009-05-26 16:27:24 +02:00
										 |  |  |     sp->crashParameter = crashParameter; | 
					
						
							|  |  |  |     const DebuggerStartMode dsm = crashParameter.isEmpty() ?  AttachExternal : AttachCrashedExternal; | 
					
						
							| 
									
										
										
										
											2009-05-05 17:48:54 +02:00
										 |  |  |     QSharedPointer<RunConfiguration> rc = activeRunConfiguration(); | 
					
						
							| 
									
										
										
										
											2009-07-28 09:10:35 +02:00
										 |  |  |     if (rc.isNull()) | 
					
						
							|  |  |  |         rc = DebuggerRunner::createDefaultRunConfiguration(); | 
					
						
							| 
									
										
										
										
											2009-05-05 17:48:54 +02:00
										 |  |  |     if (RunControl *runControl = m_debuggerRunner | 
					
						
							| 
									
										
										
										
											2009-05-26 16:27:24 +02:00
										 |  |  |             ->run(rc, ProjectExplorer::Constants::DEBUGMODE, sp, dsm)) | 
					
						
							| 
									
										
										
										
											2009-05-05 17:48:54 +02:00
										 |  |  |         runControl->start(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void DebuggerPlugin::attachCore() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2009-05-25 16:22:11 +02:00
										 |  |  |     const QSharedPointer<DebuggerStartParameters> sp(new DebuggerStartParameters); | 
					
						
							|  |  |  |     AttachCoreDialog dlg(m_manager->mainWindow()); | 
					
						
							|  |  |  |     dlg.setExecutableFile( | 
					
						
							|  |  |  |             configValue(_("LastExternalExecutableFile")).toString()); | 
					
						
							|  |  |  |     dlg.setCoreFile( | 
					
						
							|  |  |  |             configValue(_("LastExternalCoreFile")).toString()); | 
					
						
							|  |  |  |     if (dlg.exec() != QDialog::Accepted) | 
					
						
							|  |  |  |         return; | 
					
						
							|  |  |  |     setConfigValue(_("LastExternalExecutableFile"), | 
					
						
							|  |  |  |                    dlg.executableFile()); | 
					
						
							|  |  |  |     setConfigValue(_("LastExternalCoreFile"), | 
					
						
							|  |  |  |                    dlg.coreFile()); | 
					
						
							|  |  |  |     sp->executable = dlg.executableFile(); | 
					
						
							|  |  |  |     sp->coreFile = dlg.coreFile(); | 
					
						
							| 
									
										
										
										
											2009-05-05 17:48:54 +02:00
										 |  |  |     QSharedPointer<RunConfiguration> rc = activeRunConfiguration(); | 
					
						
							| 
									
										
										
										
											2009-07-31 09:07:46 +02:00
										 |  |  |     if (rc.isNull()) | 
					
						
							|  |  |  |         rc = DebuggerRunner::createDefaultRunConfiguration(); | 
					
						
							| 
									
										
										
										
											2009-05-05 17:48:54 +02:00
										 |  |  |     if (RunControl *runControl = m_debuggerRunner | 
					
						
							| 
									
										
										
										
											2009-05-25 16:22:11 +02:00
										 |  |  |             ->run(rc, ProjectExplorer::Constants::DEBUGMODE, sp, AttachCore)) | 
					
						
							| 
									
										
										
										
											2009-05-05 17:48:54 +02:00
										 |  |  |         runControl->start(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-06 13:27:11 +02:00
										 |  |  | void DebuggerPlugin::startRemoteApplication() | 
					
						
							| 
									
										
										
										
											2009-05-05 17:48:54 +02:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2009-05-25 16:22:11 +02:00
										 |  |  |     const QSharedPointer<DebuggerStartParameters> sp(new DebuggerStartParameters); | 
					
						
							|  |  |  |     StartRemoteDialog dlg(m_manager->mainWindow()); | 
					
						
							|  |  |  |     QStringList arches; | 
					
						
							|  |  |  |     arches.append(_("i386:x86-64:intel")); | 
					
						
							|  |  |  |     dlg.setRemoteArchitectures(arches); | 
					
						
							|  |  |  |     dlg.setRemoteChannel( | 
					
						
							|  |  |  |             configValue(_("LastRemoteChannel")).toString()); | 
					
						
							|  |  |  |     dlg.setRemoteArchitecture( | 
					
						
							|  |  |  |             configValue(_("LastRemoteArchitecture")).toString()); | 
					
						
							|  |  |  |     dlg.setServerStartScript( | 
					
						
							|  |  |  |             configValue(_("LastServerStartScript")).toString()); | 
					
						
							|  |  |  |     dlg.setUseServerStartScript( | 
					
						
							|  |  |  |             configValue(_("LastUseServerStartScript")).toBool()); | 
					
						
							|  |  |  |     if (dlg.exec() != QDialog::Accepted) | 
					
						
							|  |  |  |         return; | 
					
						
							|  |  |  |     setConfigValue(_("LastRemoteChannel"), dlg.remoteChannel()); | 
					
						
							|  |  |  |     setConfigValue(_("LastRemoteArchitecture"), dlg.remoteArchitecture()); | 
					
						
							|  |  |  |     setConfigValue(_("LastServerStartScript"), dlg.serverStartScript()); | 
					
						
							|  |  |  |     setConfigValue(_("LastUseServerStartScript"), dlg.useServerStartScript()); | 
					
						
							|  |  |  |     sp->remoteChannel = dlg.remoteChannel(); | 
					
						
							|  |  |  |     sp->remoteArchitecture = dlg.remoteArchitecture(); | 
					
						
							|  |  |  |     if (dlg.useServerStartScript()) | 
					
						
							|  |  |  |         sp->serverStartScript = dlg.serverStartScript(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-05 17:48:54 +02:00
										 |  |  |     QSharedPointer<RunConfiguration> rc = activeRunConfiguration(); | 
					
						
							| 
									
										
										
										
											2009-07-31 09:07:46 +02:00
										 |  |  |     if (rc.isNull()) | 
					
						
							|  |  |  |         rc = DebuggerRunner::createDefaultRunConfiguration(); | 
					
						
							| 
									
										
										
										
											2009-05-05 17:48:54 +02:00
										 |  |  |     if (RunControl *runControl = m_debuggerRunner | 
					
						
							| 
									
										
										
										
											2009-05-25 16:22:11 +02:00
										 |  |  |             ->run(rc, ProjectExplorer::Constants::DEBUGMODE, sp, StartRemote)) | 
					
						
							| 
									
										
										
										
											2009-05-05 17:48:54 +02:00
										 |  |  |         runControl->start(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-07 16:51:02 +02:00
										 |  |  | void DebuggerPlugin::attachRemoteTcf() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2009-05-25 16:22:11 +02:00
										 |  |  |     const QSharedPointer<DebuggerStartParameters> sp(new DebuggerStartParameters); | 
					
						
							|  |  |  |     AttachTcfDialog dlg(m_manager->mainWindow()); | 
					
						
							|  |  |  |     QStringList arches; | 
					
						
							|  |  |  |     arches.append(_("i386:x86-64:intel")); | 
					
						
							|  |  |  |     dlg.setRemoteArchitectures(arches); | 
					
						
							|  |  |  |     dlg.setRemoteChannel( | 
					
						
							|  |  |  |             configValue(_("LastTcfRemoteChannel")).toString()); | 
					
						
							|  |  |  |     dlg.setRemoteArchitecture( | 
					
						
							|  |  |  |             configValue(_("LastTcfRemoteArchitecture")).toString()); | 
					
						
							|  |  |  |     dlg.setServerStartScript( | 
					
						
							|  |  |  |             configValue(_("LastTcfServerStartScript")).toString()); | 
					
						
							|  |  |  |     dlg.setUseServerStartScript( | 
					
						
							|  |  |  |             configValue(_("LastTcfUseServerStartScript")).toBool()); | 
					
						
							|  |  |  |     if (dlg.exec() != QDialog::Accepted) | 
					
						
							|  |  |  |         return; | 
					
						
							|  |  |  |     setConfigValue(_("LastTcfRemoteChannel"), dlg.remoteChannel()); | 
					
						
							|  |  |  |     setConfigValue(_("LastTcfRemoteArchitecture"), dlg.remoteArchitecture()); | 
					
						
							|  |  |  |     setConfigValue(_("LastTcfServerStartScript"), dlg.serverStartScript()); | 
					
						
							|  |  |  |     setConfigValue(_("LastTcfUseServerStartScript"), dlg.useServerStartScript()); | 
					
						
							|  |  |  |     sp->remoteChannel = dlg.remoteChannel(); | 
					
						
							|  |  |  |     sp->remoteArchitecture = dlg.remoteArchitecture(); | 
					
						
							|  |  |  |     sp->serverStartScript = dlg.serverStartScript(); | 
					
						
							|  |  |  |     if (dlg.useServerStartScript()) | 
					
						
							|  |  |  |         sp->serverStartScript = dlg.serverStartScript(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-07 16:51:02 +02:00
										 |  |  |     QSharedPointer<RunConfiguration> rc = activeRunConfiguration(); | 
					
						
							| 
									
										
										
										
											2009-07-31 09:07:46 +02:00
										 |  |  |     if (rc.isNull()) | 
					
						
							|  |  |  |         rc = DebuggerRunner::createDefaultRunConfiguration(); | 
					
						
							| 
									
										
										
										
											2009-05-07 16:51:02 +02:00
										 |  |  |     if (RunControl *runControl = m_debuggerRunner | 
					
						
							| 
									
										
										
										
											2009-05-25 16:22:11 +02:00
										 |  |  |             ->run(rc, ProjectExplorer::Constants::DEBUGMODE, sp, AttachTcf)) | 
					
						
							| 
									
										
										
										
											2009-05-07 16:51:02 +02:00
										 |  |  |         runControl->start(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-07 15:20:44 +02:00
										 |  |  | void DebuggerPlugin::updateActions(int status) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     const bool started = status == DebuggerInferiorRunning | 
					
						
							|  |  |  |         || status == DebuggerInferiorRunningRequested | 
					
						
							|  |  |  |         || status == DebuggerInferiorStopRequested | 
					
						
							|  |  |  |         || status == DebuggerInferiorStopped; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const bool starting = status == DebuggerProcessStartingUp; | 
					
						
							|  |  |  |     //const bool running = status == DebuggerInferiorRunning;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const bool ready = status == DebuggerInferiorStopped | 
					
						
							|  |  |  |             && m_manager->startMode() != AttachCore; | 
					
						
							|  |  |  |     m_startExternalAction->setEnabled(!started && !starting); | 
					
						
							|  |  |  |     m_attachExternalAction->setEnabled(!started && !starting); | 
					
						
							|  |  |  | #ifdef Q_OS_WIN
 | 
					
						
							|  |  |  |     m_attachCoreAction->setEnabled(false); | 
					
						
							|  |  |  | #else
 | 
					
						
							|  |  |  |     m_attachCoreAction->setEnabled(!started && !starting); | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  |     m_startRemoteAction->setEnabled(!started && !starting); | 
					
						
							|  |  |  |     m_detachAction->setEnabled(ready); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2009-05-05 17:48:54 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | #include "debuggerplugin.moc"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Q_EXPORT_PLUGIN(DebuggerPlugin) |