| 
									
										
										
										
											2010-05-07 15:16:31 +02:00
										 |  |  | /**************************************************************************
 | 
					
						
							|  |  |  | ** | 
					
						
							|  |  |  | ** This file is part of Qt Creator | 
					
						
							|  |  |  | ** | 
					
						
							|  |  |  | ** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). | 
					
						
							|  |  |  | ** | 
					
						
							|  |  |  | ** Contact: Nokia Corporation (qt-info@nokia.com) | 
					
						
							|  |  |  | ** | 
					
						
							|  |  |  | ** Commercial Usage | 
					
						
							|  |  |  | ** | 
					
						
							|  |  |  | ** 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. | 
					
						
							|  |  |  | ** | 
					
						
							|  |  |  | ** GNU Lesser General Public License Usage | 
					
						
							|  |  |  | ** | 
					
						
							|  |  |  | ** 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.
 | 
					
						
							|  |  |  | ** | 
					
						
							|  |  |  | ** If you are unsure which license is appropriate for your use, please | 
					
						
							|  |  |  | ** contact the sales department at http://qt.nokia.com/contact.
 | 
					
						
							|  |  |  | ** | 
					
						
							|  |  |  | **************************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef DEBUGGER_BREAKPOINT_H
 | 
					
						
							|  |  |  | #define DEBUGGER_BREAKPOINT_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-06-16 11:08:54 +02:00
										 |  |  | #include <QtCore/QMetaType>
 | 
					
						
							|  |  |  | #include <QtCore/QList>
 | 
					
						
							| 
									
										
										
										
											2010-05-07 15:16:31 +02:00
										 |  |  | #include <QtCore/QString>
 | 
					
						
							| 
									
										
										
										
											2010-10-25 14:00:19 +02:00
										 |  |  | #include <QtCore/QCoreApplication>
 | 
					
						
							| 
									
										
										
										
											2010-05-07 15:16:31 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | namespace Debugger { | 
					
						
							|  |  |  | namespace Internal { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class BreakpointMarker; | 
					
						
							|  |  |  | class BreakHandler; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //////////////////////////////////////////////////////////////////
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // BreakpointData
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | //////////////////////////////////////////////////////////////////
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-28 12:18:38 +02:00
										 |  |  | enum BreakpointType | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     BreakpointByFileAndLine, | 
					
						
							|  |  |  |     BreakpointByFunction, | 
					
						
							|  |  |  |     BreakpointByAddress, | 
					
						
							|  |  |  |     Watchpoint, | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-05-07 15:16:31 +02:00
										 |  |  | class BreakpointData | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | public: | 
					
						
							|  |  |  |     BreakpointData(); | 
					
						
							|  |  |  |     ~BreakpointData(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     QString toToolTip() const; | 
					
						
							| 
									
										
										
										
											2010-10-05 16:05:47 +02:00
										 |  |  |     void clear(); // Delete all generated data.
 | 
					
						
							| 
									
										
										
										
											2010-05-07 15:16:31 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-08 09:54:40 +02:00
										 |  |  |     bool isLocatedAt(const QString &fileName, int lineNumber, | 
					
						
							|  |  |  |         bool useMarkerPosition) const; | 
					
						
							| 
									
										
										
										
											2010-06-16 11:08:54 +02:00
										 |  |  |     bool isSimilarTo(const BreakpointData *needle) const; | 
					
						
							| 
									
										
										
										
											2010-05-07 15:16:31 +02:00
										 |  |  |     bool conditionsMatch() const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-06-16 11:08:54 +02:00
										 |  |  |     // This copies only the static data.
 | 
					
						
							| 
									
										
										
										
											2010-07-13 17:16:31 +02:00
										 |  |  |     BreakpointData *clone() const; | 
					
						
							| 
									
										
										
										
											2010-06-16 11:08:54 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-28 16:42:21 +02:00
										 |  |  |     // Generic name for function to break on 'throw'
 | 
					
						
							|  |  |  |     static const char *throwFunction; | 
					
						
							|  |  |  |     static const char *catchFunction; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-05-07 15:16:31 +02:00
										 |  |  | private: | 
					
						
							|  |  |  |     // Intentionally unimplemented.
 | 
					
						
							|  |  |  |     // Making it copyable is tricky because of the markers.
 | 
					
						
							| 
									
										
										
										
											2010-06-22 14:52:26 +02:00
										 |  |  |     BreakpointData(const BreakpointData &); | 
					
						
							| 
									
										
										
										
											2010-05-07 15:16:31 +02:00
										 |  |  |     void operator=(const BreakpointData &); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     friend class BreakHandler; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | public: | 
					
						
							| 
									
										
										
										
											2010-10-25 14:00:19 +02:00
										 |  |  |     quint64 id; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-05-07 15:16:31 +02:00
										 |  |  |     bool enabled;            // Should we talk to the debugger engine?
 | 
					
						
							|  |  |  |     bool pending;            // Does the debugger engine know about us already?
 | 
					
						
							| 
									
										
										
										
											2010-10-28 12:18:38 +02:00
										 |  |  |     BreakpointType type;     // Type of breakpoint.
 | 
					
						
							| 
									
										
										
										
											2010-05-07 15:16:31 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     // This "user requested information" will get stored in the session.
 | 
					
						
							|  |  |  |     QString fileName;        // Short name of source file.
 | 
					
						
							|  |  |  |     QByteArray condition;    // Condition associated with breakpoint.
 | 
					
						
							| 
									
										
										
										
											2010-09-21 14:26:45 +02:00
										 |  |  |     int ignoreCount;         // Ignore count associated with breakpoint.
 | 
					
						
							|  |  |  |     int lineNumber;          // Line in source file.
 | 
					
						
							|  |  |  |     quint64 address;         // Address for watchpoints.
 | 
					
						
							| 
									
										
										
										
											2010-05-07 15:16:31 +02:00
										 |  |  |     QByteArray threadSpec;   // Thread specification.
 | 
					
						
							| 
									
										
										
										
											2010-09-28 16:42:21 +02:00
										 |  |  |     // Name of containing function, special values:
 | 
					
						
							|  |  |  |     // BreakpointData::throwFunction, BreakpointData::catchFunction
 | 
					
						
							|  |  |  |     QString funcName; | 
					
						
							| 
									
										
										
										
											2010-05-07 15:16:31 +02:00
										 |  |  |     bool useFullPath;        // Should we use the full path when setting the bp?
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // This is what gdb produced in response.
 | 
					
						
							|  |  |  |     QByteArray bpNumber;     // Breakpoint number assigned by the debugger engine.
 | 
					
						
							|  |  |  |     QByteArray bpCondition;  // Condition acknowledged by the debugger engine.
 | 
					
						
							| 
									
										
										
										
											2010-09-21 14:26:45 +02:00
										 |  |  |     int bpIgnoreCount;       // Ignore count acknowledged by the debugger engine.
 | 
					
						
							| 
									
										
										
										
											2010-05-07 15:16:31 +02:00
										 |  |  |     QString bpFileName;      // File name acknowledged by the debugger engine.
 | 
					
						
							|  |  |  |     QString bpFullName;      // Full file name acknowledged by the debugger engine.
 | 
					
						
							| 
									
										
										
										
											2010-09-21 14:26:45 +02:00
										 |  |  |     int bpLineNumber; // Line number acknowledged by the debugger engine.
 | 
					
						
							|  |  |  |     int bpCorrectedLineNumber; // Acknowledged by the debugger engine.
 | 
					
						
							| 
									
										
										
										
											2010-05-07 15:16:31 +02:00
										 |  |  |     QByteArray bpThreadSpec; // Thread spec acknowledged by the debugger engine.
 | 
					
						
							|  |  |  |     QString bpFuncName;      // Function name acknowledged by the debugger engine.
 | 
					
						
							| 
									
										
										
										
											2010-09-21 14:26:45 +02:00
										 |  |  |     quint64 bpAddress;       // Address acknowledged by the debugger engine.
 | 
					
						
							| 
									
										
										
										
											2010-05-07 15:16:31 +02:00
										 |  |  |     bool bpMultiple;         // Happens in constructors/gdb.
 | 
					
						
							|  |  |  |     bool bpEnabled;          // Enable/disable command sent.
 | 
					
						
							| 
									
										
										
										
											2010-09-21 14:26:45 +02:00
										 |  |  |     QByteArray bpState;      // gdb: <PENDING>, <MULTIPLE>
 | 
					
						
							| 
									
										
										
										
											2010-05-07 15:16:31 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     void setMarkerFileName(const QString &fileName); | 
					
						
							|  |  |  |     QString markerFileName() const { return m_markerFileName; } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     void setMarkerLineNumber(int lineNumber); | 
					
						
							|  |  |  |     int markerLineNumber() const { return m_markerLineNumber; } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-28 12:18:38 +02:00
										 |  |  |     bool isWatchpoint() const { return type == Watchpoint; } | 
					
						
							|  |  |  |     bool isBreakpoint() const { return type != Watchpoint; } // Enough for now.
 | 
					
						
							| 
									
										
										
										
											2010-07-20 11:15:21 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-25 14:00:19 +02:00
										 |  |  |     Q_DECLARE_TR_FUNCTIONS(BreakHandler) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // TODO: move those to breakhandler
 | 
					
						
							| 
									
										
										
										
											2010-10-28 12:18:38 +02:00
										 |  |  | private: | 
					
						
							| 
									
										
										
										
											2010-05-07 15:16:31 +02:00
										 |  |  |     // Taken from either user input or gdb responses.
 | 
					
						
							|  |  |  |     QString m_markerFileName; // Used to locate the marker.
 | 
					
						
							|  |  |  |     int m_markerLineNumber; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-06-16 11:08:54 +02:00
										 |  |  | typedef QList<BreakpointData *> Breakpoints; | 
					
						
							| 
									
										
										
										
											2010-05-07 15:16:31 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | } // namespace Internal
 | 
					
						
							|  |  |  | } // namespace Debugger
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-06-16 11:08:54 +02:00
										 |  |  | Q_DECLARE_METATYPE(Debugger::Internal::BreakpointData *); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-05-07 15:16:31 +02:00
										 |  |  | #endif // DEBUGGER_BREAKPOINT_H
 |