2009-03-18 10:04:02 +01:00
|
|
|
/**************************************************************************
|
|
|
|
|
**
|
|
|
|
|
** This file is part of Qt Creator
|
|
|
|
|
**
|
2012-01-26 18:33:46 +01:00
|
|
|
** Copyright (c) 2012 Nokia Corporation and/or its subsidiary(-ies).
|
2009-03-18 10:04:02 +01:00
|
|
|
**
|
2011-11-02 15:59:12 +01:00
|
|
|
** Contact: Nokia Corporation (qt-info@nokia.com)
|
2009-03-18 10:04:02 +01:00
|
|
|
**
|
|
|
|
|
**
|
|
|
|
|
** GNU Lesser General Public License Usage
|
|
|
|
|
**
|
2011-04-13 08:42:33 +02:00
|
|
|
** 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.
|
2009-03-18 10:04:02 +01:00
|
|
|
**
|
2010-12-17 16:01:08 +01:00
|
|
|
** In addition, as a special exception, Nokia gives you certain additional
|
2011-04-13 08:42:33 +02:00
|
|
|
** rights. These rights are described in the Nokia Qt LGPL Exception
|
2010-12-17 16:01:08 +01:00
|
|
|
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
|
|
|
|
**
|
2011-04-13 08:42:33 +02:00
|
|
|
** Other Usage
|
|
|
|
|
**
|
|
|
|
|
** Alternatively, this file may be used in accordance with the terms and
|
|
|
|
|
** conditions contained in a signed written agreement between you and Nokia.
|
|
|
|
|
**
|
2010-12-17 16:01:08 +01:00
|
|
|
** If you have questions regarding the use of this file, please contact
|
2011-11-02 15:59:12 +01:00
|
|
|
** Nokia at qt-info@nokia.com.
|
2009-03-18 10:04:02 +01:00
|
|
|
**
|
|
|
|
|
**************************************************************************/
|
|
|
|
|
|
|
|
|
|
#include "debuggeractions.h"
|
2012-04-11 09:16:06 +02:00
|
|
|
#include "debuggerconstants.h"
|
|
|
|
|
|
2010-03-25 16:54:23 +01:00
|
|
|
#ifdef Q_OS_WIN
|
|
|
|
|
#include "registerpostmortemaction.h"
|
|
|
|
|
#endif
|
2009-03-18 10:04:02 +01:00
|
|
|
|
2010-03-18 10:59:06 +01:00
|
|
|
#include <utils/savedaction.h>
|
2009-03-19 09:32:09 +01:00
|
|
|
#include <utils/qtcassert.h>
|
|
|
|
|
#include <utils/pathchooser.h>
|
|
|
|
|
|
2012-04-11 09:16:06 +02:00
|
|
|
#include <extensionsystem/pluginmanager.h>
|
|
|
|
|
|
2012-02-15 10:42:41 +01:00
|
|
|
#include <QDebug>
|
|
|
|
|
#include <QVariant>
|
|
|
|
|
#include <QSettings>
|
2009-03-18 10:04:02 +01:00
|
|
|
|
2009-10-05 11:06:05 +02:00
|
|
|
using namespace Utils;
|
2009-03-18 10:04:02 +01:00
|
|
|
|
2010-04-08 16:55:25 +02:00
|
|
|
static const char debugModeSettingsGroupC[] = "DebugMode";
|
2011-03-04 16:21:57 +01:00
|
|
|
static const char sourcePathMappingArrayNameC[] = "SourcePathMappings";
|
|
|
|
|
static const char sourcePathMappingSourceKeyC[] = "Source";
|
|
|
|
|
static const char sourcePathMappingTargetKeyC[] = "Target";
|
2010-04-08 16:55:25 +02:00
|
|
|
|
2009-03-26 18:02:43 +01:00
|
|
|
namespace Debugger {
|
|
|
|
|
namespace Internal {
|
2009-03-26 15:56:16 +01:00
|
|
|
|
2011-03-04 16:21:57 +01:00
|
|
|
void GlobalDebuggerOptions::toSettings(QSettings *s) const
|
|
|
|
|
{
|
|
|
|
|
s->beginWriteArray(QLatin1String(sourcePathMappingArrayNameC));
|
|
|
|
|
if (!sourcePathMap.isEmpty()) {
|
|
|
|
|
const QString sourcePathMappingSourceKey = QLatin1String(sourcePathMappingSourceKeyC);
|
|
|
|
|
const QString sourcePathMappingTargetKey = QLatin1String(sourcePathMappingTargetKeyC);
|
|
|
|
|
int i = 0;
|
|
|
|
|
const SourcePathMap::const_iterator cend = sourcePathMap.constEnd();
|
|
|
|
|
for (SourcePathMap::const_iterator it = sourcePathMap.constBegin(); it != cend; ++it, ++i) {
|
|
|
|
|
s->setArrayIndex(i);
|
|
|
|
|
s->setValue(sourcePathMappingSourceKey, it.key());
|
|
|
|
|
s->setValue(sourcePathMappingTargetKey, it.value());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
s->endArray();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void GlobalDebuggerOptions::fromSettings(QSettings *s)
|
|
|
|
|
{
|
|
|
|
|
sourcePathMap.clear();
|
|
|
|
|
if (const int count = s->beginReadArray(QLatin1String(sourcePathMappingArrayNameC))) {
|
|
|
|
|
const QString sourcePathMappingSourceKey = QLatin1String(sourcePathMappingSourceKeyC);
|
|
|
|
|
const QString sourcePathMappingTargetKey = QLatin1String(sourcePathMappingTargetKeyC);
|
|
|
|
|
for (int i = 0; i < count; ++i) {
|
|
|
|
|
s->setArrayIndex(i);
|
|
|
|
|
sourcePathMap.insert(s->value(sourcePathMappingSourceKey).toString(),
|
|
|
|
|
s->value(sourcePathMappingTargetKey).toString());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
s->endArray();
|
|
|
|
|
}
|
|
|
|
|
|
2009-03-18 10:04:02 +01:00
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
|
//
|
2009-03-19 15:44:26 +01:00
|
|
|
// DebuggerSettings
|
2009-03-18 10:04:02 +01:00
|
|
|
//
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
2010-11-10 16:33:11 +01:00
|
|
|
DebuggerSettings::DebuggerSettings(QSettings *settings)
|
2009-03-19 09:32:09 +01:00
|
|
|
{
|
2010-11-10 16:33:11 +01:00
|
|
|
m_settings = settings;
|
2010-04-08 16:55:25 +02:00
|
|
|
const QString debugModeGroup = QLatin1String(debugModeSettingsGroupC);
|
2009-03-19 09:32:09 +01:00
|
|
|
|
2009-03-26 17:27:44 +01:00
|
|
|
SavedAction *item = 0;
|
2009-03-19 09:32:09 +01:00
|
|
|
|
2012-04-11 09:16:06 +02:00
|
|
|
//The Actions that are accessed by QML Inspector are added to PluginManager
|
|
|
|
|
//Needed by QML Inspector
|
2010-11-10 16:33:11 +01:00
|
|
|
item = new SavedAction(this);
|
|
|
|
|
insertItem(SettingsDialog, item);
|
2010-02-16 11:28:41 +01:00
|
|
|
item->setText(tr("Debugger Properties..."));
|
2012-04-11 09:16:06 +02:00
|
|
|
item->setObjectName(QLatin1String(Constants::SETTINGS_DIALOG));
|
|
|
|
|
ExtensionSystem::PluginManager::instance()->addObject(item);
|
2009-03-27 13:04:23 +01:00
|
|
|
|
2009-03-25 12:30:13 +01:00
|
|
|
//
|
|
|
|
|
// View
|
|
|
|
|
//
|
2010-11-10 16:33:11 +01:00
|
|
|
item = new SavedAction(this);
|
2011-03-16 18:48:14 +01:00
|
|
|
item->setText(tr("Always Adjust Column Widths to Contents"));
|
|
|
|
|
item->setCheckable(true);
|
|
|
|
|
item->setValue(false);
|
|
|
|
|
item->setDefaultValue(false);
|
|
|
|
|
item->setSettingsKey(debugModeGroup,
|
|
|
|
|
QLatin1String("AlwaysAdjustLocalsColumnWidths"));
|
|
|
|
|
insertItem(AlwaysAdjustLocalsColumnWidths, item);
|
|
|
|
|
|
|
|
|
|
item = new SavedAction(this);
|
|
|
|
|
item->setText(tr("Always Adjust Column Widths to Contents"));
|
|
|
|
|
item->setCheckable(true);
|
|
|
|
|
item->setValue(false);
|
|
|
|
|
item->setDefaultValue(false);
|
|
|
|
|
item->setSettingsKey(debugModeGroup,
|
|
|
|
|
QLatin1String("AlwaysAdjustStackColumnWidths"));
|
|
|
|
|
insertItem(AlwaysAdjustStackColumnWidths, item);
|
2009-03-19 09:32:09 +01:00
|
|
|
|
2010-11-10 16:33:11 +01:00
|
|
|
item = new SavedAction(this);
|
2010-02-16 11:28:41 +01:00
|
|
|
item->setText(tr("Always Adjust Column Widths to Contents"));
|
2009-03-19 15:54:52 +01:00
|
|
|
item->setCheckable(true);
|
2011-03-16 18:48:14 +01:00
|
|
|
item->setValue(false);
|
|
|
|
|
item->setDefaultValue(false);
|
|
|
|
|
item->setSettingsKey(debugModeGroup,
|
|
|
|
|
QLatin1String("AlwaysAdjustThreadsColumnWidths"));
|
2011-03-16 18:53:50 +01:00
|
|
|
insertItem(AlwaysAdjustThreadsColumnWidths, item);
|
2011-03-16 18:48:14 +01:00
|
|
|
|
|
|
|
|
item = new SavedAction(this);
|
|
|
|
|
item->setText(tr("Always Adjust Column Widths to Contents"));
|
|
|
|
|
item->setCheckable(true);
|
|
|
|
|
item->setValue(false);
|
|
|
|
|
item->setDefaultValue(false);
|
|
|
|
|
item->setSettingsKey(debugModeGroup,
|
|
|
|
|
QLatin1String("AlwaysAdjustRegistersColumnWidths"));
|
2011-03-16 18:53:50 +01:00
|
|
|
insertItem(AlwaysAdjustRegistersColumnWidths, item);
|
2011-03-16 18:48:14 +01:00
|
|
|
|
|
|
|
|
item = new SavedAction(this);
|
|
|
|
|
item->setText(tr("Always Adjust Column Widths to Contents"));
|
|
|
|
|
item->setCheckable(true);
|
|
|
|
|
item->setValue(false);
|
|
|
|
|
item->setDefaultValue(false);
|
|
|
|
|
item->setSettingsKey(debugModeGroup,
|
|
|
|
|
QLatin1String("AlwaysAdjustSnapshotsColumnWidths"));
|
2011-03-16 18:53:50 +01:00
|
|
|
insertItem(AlwaysAdjustSnapshotsColumnWidths, item);
|
2011-03-16 18:48:14 +01:00
|
|
|
|
|
|
|
|
item = new SavedAction(this);
|
|
|
|
|
item->setText(tr("Always Adjust Column Widths to Contents"));
|
|
|
|
|
item->setCheckable(true);
|
|
|
|
|
item->setValue(false);
|
|
|
|
|
item->setDefaultValue(false);
|
|
|
|
|
item->setSettingsKey(debugModeGroup,
|
|
|
|
|
QLatin1String("AlwaysAdjustBreakpointsColumnWidths"));
|
2011-03-16 18:53:50 +01:00
|
|
|
insertItem(AlwaysAdjustBreakpointsColumnWidths, item);
|
2011-03-16 18:48:14 +01:00
|
|
|
|
|
|
|
|
item = new SavedAction(this);
|
|
|
|
|
item->setText(tr("Always Adjust Column Widths to Contents"));
|
|
|
|
|
item->setCheckable(true);
|
|
|
|
|
item->setValue(false);
|
|
|
|
|
item->setDefaultValue(false);
|
|
|
|
|
item->setSettingsKey(debugModeGroup,
|
|
|
|
|
QLatin1String("AlwaysAdjustModulesColumnWidths"));
|
2011-03-16 18:53:50 +01:00
|
|
|
insertItem(AlwaysAdjustModulesColumnWidths, item);
|
2009-03-19 09:32:09 +01:00
|
|
|
|
2012-04-11 09:16:06 +02:00
|
|
|
//Needed by QML Inspector
|
2010-11-10 16:33:11 +01:00
|
|
|
item = new SavedAction(this);
|
2010-02-16 11:28:41 +01:00
|
|
|
item->setText(tr("Use Alternating Row Colors"));
|
2009-05-05 10:14:35 +02:00
|
|
|
item->setSettingsKey(debugModeGroup, QLatin1String("UseAlternatingRowColours"));
|
|
|
|
|
item->setCheckable(true);
|
|
|
|
|
item->setDefaultValue(false);
|
2010-11-10 16:33:11 +01:00
|
|
|
insertItem(UseAlternatingRowColors, item);
|
2012-04-11 09:16:06 +02:00
|
|
|
item->setObjectName(QLatin1String(Constants::USE_ALTERNATING_ROW_COLORS));
|
|
|
|
|
ExtensionSystem::PluginManager::instance()->addObject(item);
|
2009-05-05 10:14:35 +02:00
|
|
|
|
2011-04-01 12:01:14 +02:00
|
|
|
item = new SavedAction(this);
|
|
|
|
|
item->setText(tr("Debugger Font Size Follows Main Editor"));
|
|
|
|
|
item->setSettingsKey(debugModeGroup, QLatin1String("FontSizeFollowsEditor"));
|
|
|
|
|
item->setCheckable(true);
|
|
|
|
|
item->setDefaultValue(false);
|
|
|
|
|
insertItem(FontSizeFollowsEditor, item);
|
|
|
|
|
|
2010-11-10 16:33:11 +01:00
|
|
|
item = new SavedAction(this);
|
2010-02-16 11:28:41 +01:00
|
|
|
item->setText(tr("Show a Message Box When Receiving a Signal"));
|
2009-08-13 14:33:02 +02:00
|
|
|
item->setSettingsKey(debugModeGroup, QLatin1String("UseMessageBoxForSignals"));
|
|
|
|
|
item->setCheckable(true);
|
|
|
|
|
item->setDefaultValue(true);
|
|
|
|
|
item->setValue(true);
|
2010-11-10 16:33:11 +01:00
|
|
|
insertItem(UseMessageBoxForSignals, item);
|
2009-08-13 14:33:02 +02:00
|
|
|
|
2010-11-10 16:33:11 +01:00
|
|
|
item = new SavedAction(this);
|
2010-02-16 11:28:41 +01:00
|
|
|
item->setText(tr("Log Time Stamps"));
|
2009-08-13 14:33:02 +02:00
|
|
|
item->setSettingsKey(debugModeGroup, QLatin1String("LogTimeStamps"));
|
2009-06-19 12:04:21 +02:00
|
|
|
item->setCheckable(true);
|
|
|
|
|
item->setDefaultValue(false);
|
2010-11-10 16:33:11 +01:00
|
|
|
insertItem(LogTimeStamps, item);
|
2009-06-19 12:04:21 +02:00
|
|
|
|
2010-11-10 16:33:11 +01:00
|
|
|
item = new SavedAction(this);
|
2010-01-15 12:01:26 +01:00
|
|
|
item->setText(tr("Verbose Log"));
|
|
|
|
|
item->setSettingsKey(debugModeGroup, QLatin1String("VerboseLog"));
|
|
|
|
|
item->setCheckable(true);
|
|
|
|
|
item->setDefaultValue(false);
|
2010-11-10 16:33:11 +01:00
|
|
|
insertItem(VerboseLog, item);
|
2010-01-15 12:01:26 +01:00
|
|
|
|
2010-11-10 16:33:11 +01:00
|
|
|
item = new SavedAction(this);
|
2010-02-16 11:28:41 +01:00
|
|
|
item->setText(tr("Operate by Instruction"));
|
2009-08-14 13:04:05 +02:00
|
|
|
item->setCheckable(true);
|
|
|
|
|
item->setDefaultValue(false);
|
2010-07-30 22:16:59 +02:00
|
|
|
item->setIcon(QIcon(QLatin1String(":/debugger/images/debugger_singleinstructionmode.png")));
|
2009-09-29 11:13:19 +02:00
|
|
|
item->setToolTip(tr("This switches the debugger to instruction-wise "
|
|
|
|
|
"operation mode. In this mode, stepping operates on single "
|
|
|
|
|
"instructions and the source location view also shows the "
|
|
|
|
|
"disassembled instructions."));
|
2010-06-11 15:33:11 +02:00
|
|
|
item->setIconVisibleInMenu(false);
|
2010-11-10 16:33:11 +01:00
|
|
|
insertItem(OperateByInstruction, item);
|
2009-08-14 13:04:05 +02:00
|
|
|
|
2010-11-10 16:33:11 +01:00
|
|
|
item = new SavedAction(this);
|
2010-02-16 11:28:41 +01:00
|
|
|
item->setText(tr("Dereference Pointers Automatically"));
|
2009-10-06 10:54:08 +02:00
|
|
|
item->setCheckable(true);
|
|
|
|
|
item->setDefaultValue(true);
|
2010-09-17 09:18:37 +02:00
|
|
|
item->setSettingsKey(debugModeGroup, QLatin1String("AutoDerefPointers"));
|
2010-09-29 12:48:00 +02:00
|
|
|
item->setToolTip(tr("This switches the Locals&&Watchers view to "
|
2010-08-19 14:04:15 +02:00
|
|
|
"automatically dereference pointers. This saves a level in the "
|
2009-10-06 10:54:08 +02:00
|
|
|
"tree view, but also loses data for the now-missing intermediate "
|
|
|
|
|
"level."));
|
2010-11-10 16:33:11 +01:00
|
|
|
insertItem(AutoDerefPointers, item);
|
2009-10-06 10:54:08 +02:00
|
|
|
|
2009-03-25 12:30:13 +01:00
|
|
|
//
|
|
|
|
|
// Locals & Watchers
|
|
|
|
|
//
|
2010-11-10 16:33:11 +01:00
|
|
|
item = new SavedAction(this);
|
2009-11-25 08:35:02 +01:00
|
|
|
item->setSettingsKey(debugModeGroup, QLatin1String("ShowStandardNamespace"));
|
2010-02-16 11:28:41 +01:00
|
|
|
item->setText(tr("Show \"std::\" Namespace in Types"));
|
2009-11-25 08:35:02 +01:00
|
|
|
item->setCheckable(true);
|
|
|
|
|
item->setDefaultValue(true);
|
|
|
|
|
item->setValue(true);
|
2010-11-10 16:33:11 +01:00
|
|
|
insertItem(ShowStdNamespace, item);
|
2009-11-25 08:35:02 +01:00
|
|
|
|
2010-11-10 16:33:11 +01:00
|
|
|
item = new SavedAction(this);
|
2009-11-25 08:35:02 +01:00
|
|
|
item->setSettingsKey(debugModeGroup, QLatin1String("ShowQtNamespace"));
|
2010-02-16 11:28:41 +01:00
|
|
|
item->setText(tr("Show Qt's Namespace in Types"));
|
2009-11-25 08:35:02 +01:00
|
|
|
item->setCheckable(true);
|
|
|
|
|
item->setDefaultValue(true);
|
|
|
|
|
item->setValue(true);
|
2010-11-10 16:33:11 +01:00
|
|
|
insertItem(ShowQtNamespace, item);
|
2009-11-25 08:35:02 +01:00
|
|
|
|
2012-04-11 09:16:06 +02:00
|
|
|
//Needed by QML Inspector
|
2010-11-10 16:33:11 +01:00
|
|
|
item = new SavedAction(this);
|
2010-09-23 11:15:56 +02:00
|
|
|
item->setSettingsKey(debugModeGroup, QLatin1String("SortStructMembers"));
|
|
|
|
|
item->setText(tr("Sort Members of Classes and Structs Alphabetically"));
|
|
|
|
|
item->setCheckable(true);
|
|
|
|
|
item->setDefaultValue(true);
|
|
|
|
|
item->setValue(true);
|
2010-11-10 16:33:11 +01:00
|
|
|
insertItem(SortStructMembers, item);
|
2012-04-11 09:16:06 +02:00
|
|
|
item->setObjectName(QLatin1String(Constants::SORT_STRUCT_MEMBERS));
|
|
|
|
|
ExtensionSystem::PluginManager::instance()->addObject(item);
|
2010-09-23 11:15:56 +02:00
|
|
|
|
2009-03-19 12:24:04 +01:00
|
|
|
//
|
2009-04-07 16:39:17 +02:00
|
|
|
// DebuggingHelper
|
2009-05-05 10:14:35 +02:00
|
|
|
//
|
2010-11-10 16:33:11 +01:00
|
|
|
item = new SavedAction(this);
|
2009-04-09 16:51:13 +02:00
|
|
|
item->setSettingsKey(debugModeGroup, QLatin1String("UseDebuggingHelper"));
|
2010-02-16 11:28:41 +01:00
|
|
|
item->setText(tr("Use Debugging Helpers"));
|
2009-03-27 13:04:23 +01:00
|
|
|
item->setCheckable(true);
|
|
|
|
|
item->setDefaultValue(true);
|
2009-06-30 14:31:33 +02:00
|
|
|
item->setValue(true);
|
2010-11-10 16:33:11 +01:00
|
|
|
insertItem(UseDebuggingHelpers, item);
|
2009-03-27 13:04:23 +01:00
|
|
|
|
2010-11-10 16:33:11 +01:00
|
|
|
item = new SavedAction(this);
|
2009-10-16 16:26:28 +02:00
|
|
|
item->setSettingsKey(debugModeGroup, QLatin1String("UseCodeModel"));
|
2010-02-16 11:28:41 +01:00
|
|
|
item->setText(tr("Use Code Model"));
|
|
|
|
|
item->setToolTip(tr("Selecting this causes the C++ Code Model being asked "
|
|
|
|
|
"for variable scope information. This might result in slightly faster "
|
|
|
|
|
"debugger operation but may fail for optimized code."));
|
2009-10-16 16:26:28 +02:00
|
|
|
item->setCheckable(true);
|
2009-11-09 16:25:40 +01:00
|
|
|
item->setDefaultValue(true);
|
|
|
|
|
item->setValue(true);
|
2010-11-10 16:33:11 +01:00
|
|
|
insertItem(UseCodeModel, item);
|
2009-03-27 13:04:23 +01:00
|
|
|
|
2010-12-20 17:39:51 +01:00
|
|
|
item = new SavedAction(this);
|
|
|
|
|
item->setSettingsKey(debugModeGroup, QLatin1String("ShowThreadNames"));
|
|
|
|
|
item->setCheckable(true);
|
|
|
|
|
item->setDefaultValue(false);
|
|
|
|
|
item->setValue(false);
|
|
|
|
|
insertItem(ShowThreadNames, item);
|
|
|
|
|
|
2009-03-18 10:04:02 +01:00
|
|
|
|
|
|
|
|
//
|
2009-03-19 09:32:09 +01:00
|
|
|
// Breakpoints
|
2009-03-18 10:04:02 +01:00
|
|
|
//
|
2010-11-10 16:33:11 +01:00
|
|
|
item = new SavedAction(this);
|
2010-02-16 11:28:41 +01:00
|
|
|
item->setText(tr("Synchronize Breakpoints"));
|
2010-11-10 16:33:11 +01:00
|
|
|
insertItem(SynchronizeBreakpoints, item);
|
2009-03-18 10:04:02 +01:00
|
|
|
|
2010-11-10 16:33:11 +01:00
|
|
|
item = new SavedAction(this);
|
2010-09-21 17:02:41 +02:00
|
|
|
item->setText(tr("Adjust Breakpoint Locations"));
|
|
|
|
|
item->setToolTip(tr("Not all source code lines generate "
|
|
|
|
|
"executable code. Putting a breakpoint on such a line acts as "
|
|
|
|
|
"if the breakpoint was set on the next line that generated code. "
|
|
|
|
|
"Selecting 'Adjust Breakpoint Locations' shifts the red "
|
|
|
|
|
"breakpoint markers in such cases to the location of the true "
|
|
|
|
|
"breakpoint."));
|
|
|
|
|
item->setCheckable(true);
|
|
|
|
|
item->setDefaultValue(true);
|
|
|
|
|
item->setValue(true);
|
|
|
|
|
item->setSettingsKey(debugModeGroup, QLatin1String("AdjustBreakpointLocations"));
|
2010-11-10 16:33:11 +01:00
|
|
|
insertItem(AdjustBreakpointLocations, item);
|
2010-09-21 17:02:41 +02:00
|
|
|
|
2010-11-10 16:33:11 +01:00
|
|
|
item = new SavedAction(this);
|
2010-02-11 17:29:10 +01:00
|
|
|
item->setText(tr("Break on \"throw\""));
|
|
|
|
|
item->setCheckable(true);
|
|
|
|
|
item->setDefaultValue(false);
|
|
|
|
|
item->setValue(false);
|
|
|
|
|
item->setSettingsKey(debugModeGroup, QLatin1String("BreakOnThrow"));
|
2010-11-10 16:33:11 +01:00
|
|
|
insertItem(BreakOnThrow, item);
|
2010-02-11 17:29:10 +01:00
|
|
|
|
2010-11-10 16:33:11 +01:00
|
|
|
item = new SavedAction(this);
|
2010-02-11 17:29:10 +01:00
|
|
|
item->setText(tr("Break on \"catch\""));
|
|
|
|
|
item->setCheckable(true);
|
|
|
|
|
item->setDefaultValue(false);
|
|
|
|
|
item->setValue(false);
|
|
|
|
|
item->setSettingsKey(debugModeGroup, QLatin1String("BreakOnCatch"));
|
2010-11-10 16:33:11 +01:00
|
|
|
insertItem(BreakOnCatch, item);
|
2010-02-11 17:29:10 +01:00
|
|
|
|
2011-05-30 16:01:50 +02:00
|
|
|
item = new SavedAction(this);
|
|
|
|
|
item->setText(tr("Break on \"qWarning\""));
|
|
|
|
|
item->setCheckable(true);
|
|
|
|
|
item->setDefaultValue(false);
|
|
|
|
|
item->setValue(false);
|
|
|
|
|
item->setSettingsKey(debugModeGroup, QLatin1String("BreakOnWarning"));
|
|
|
|
|
insertItem(BreakOnWarning, item);
|
|
|
|
|
|
2011-07-13 16:52:28 +02:00
|
|
|
item = new SavedAction(this);
|
|
|
|
|
item->setText(tr("Break on \"qFatal\""));
|
|
|
|
|
item->setCheckable(true);
|
2011-08-05 14:04:01 +02:00
|
|
|
item->setDefaultValue(false);
|
|
|
|
|
item->setValue(false);
|
2011-07-13 16:52:28 +02:00
|
|
|
item->setSettingsKey(debugModeGroup, QLatin1String("BreakOnFatal"));
|
|
|
|
|
insertItem(BreakOnFatal, item);
|
|
|
|
|
|
2012-01-15 22:21:59 +02:00
|
|
|
item = new SavedAction(this);
|
2012-05-08 18:01:28 +03:00
|
|
|
item->setText(tr("Break on \"abort\""));
|
2012-01-15 22:21:59 +02:00
|
|
|
item->setCheckable(true);
|
2012-02-23 19:46:01 +02:00
|
|
|
#ifdef Q_OS_WIN
|
|
|
|
|
item->setDefaultValue(true);
|
|
|
|
|
item->setValue(true);
|
|
|
|
|
#else
|
2012-01-15 22:21:59 +02:00
|
|
|
item->setDefaultValue(false);
|
|
|
|
|
item->setValue(false);
|
2012-02-23 19:46:01 +02:00
|
|
|
#endif
|
2012-05-08 18:01:28 +03:00
|
|
|
item->setSettingsKey(debugModeGroup, QLatin1String("BreakOnAbort"));
|
|
|
|
|
insertItem(BreakOnAbort, item);
|
2012-01-15 22:21:59 +02:00
|
|
|
|
2009-03-19 09:32:09 +01:00
|
|
|
//
|
|
|
|
|
// Settings
|
2009-03-18 10:04:02 +01:00
|
|
|
//
|
|
|
|
|
|
2010-11-10 16:33:11 +01:00
|
|
|
item = new SavedAction(this);
|
2010-12-21 11:52:21 +01:00
|
|
|
item->setSettingsKey(debugModeGroup, QLatin1String("LoadGdbInit"));
|
2009-06-26 13:17:44 +02:00
|
|
|
item->setDefaultValue(QString());
|
2010-12-21 11:52:21 +01:00
|
|
|
item->setCheckable(true);
|
|
|
|
|
item->setDefaultValue(true);
|
|
|
|
|
item->setValue(true);
|
|
|
|
|
insertItem(LoadGdbInit, item);
|
2009-03-18 10:04:02 +01:00
|
|
|
|
2011-09-22 09:30:50 +02:00
|
|
|
item = new SavedAction(this);
|
|
|
|
|
item->setSettingsKey(debugModeGroup, QLatin1String("AutoEnrichParameters"));
|
|
|
|
|
item->setDefaultValue(QString());
|
|
|
|
|
item->setCheckable(true);
|
|
|
|
|
item->setDefaultValue(false);
|
|
|
|
|
item->setValue(false);
|
|
|
|
|
insertItem(AutoEnrichParameters, item);
|
|
|
|
|
|
2011-11-29 12:20:06 +01:00
|
|
|
item = new SavedAction(this);
|
|
|
|
|
item->setSettingsKey(debugModeGroup, QLatin1String("UseDynamicType"));
|
2012-02-08 23:15:55 +01:00
|
|
|
item->setText(tr("Use Dynamic Object Type for Display"));
|
2011-11-29 12:20:06 +01:00
|
|
|
item->setCheckable(true);
|
|
|
|
|
item->setDefaultValue(true);
|
|
|
|
|
item->setValue(true);
|
|
|
|
|
insertItem(UseDynamicType, item);
|
|
|
|
|
|
2011-02-03 16:49:28 +01:00
|
|
|
item = new SavedAction(this);
|
|
|
|
|
item->setSettingsKey(debugModeGroup, QLatin1String("TargetAsync"));
|
|
|
|
|
item->setCheckable(true);
|
|
|
|
|
item->setDefaultValue(false);
|
|
|
|
|
item->setValue(false);
|
|
|
|
|
insertItem(TargetAsync, item);
|
|
|
|
|
|
2010-11-10 16:33:11 +01:00
|
|
|
item = new SavedAction(this);
|
2011-11-01 17:56:32 +01:00
|
|
|
item->setSettingsKey(debugModeGroup, QLatin1String("GdbStartupCommands"));
|
2009-06-26 13:17:44 +02:00
|
|
|
item->setDefaultValue(QString());
|
2011-11-01 17:56:32 +01:00
|
|
|
insertItem(GdbStartupCommands, item);
|
2009-03-19 09:32:09 +01:00
|
|
|
|
2010-11-10 16:33:11 +01:00
|
|
|
item = new SavedAction(this);
|
2010-10-08 17:44:11 +02:00
|
|
|
item->setSettingsKey(debugModeGroup, QLatin1String("CloseBuffersOnExit"));
|
|
|
|
|
item->setCheckable(true);
|
|
|
|
|
item->setDefaultValue(false);
|
2010-11-10 16:33:11 +01:00
|
|
|
insertItem(CloseBuffersOnExit, item);
|
2010-10-08 17:44:11 +02:00
|
|
|
|
2010-11-10 16:33:11 +01:00
|
|
|
item = new SavedAction(this);
|
2010-10-08 17:44:11 +02:00
|
|
|
item->setSettingsKey(debugModeGroup, QLatin1String("SwitchModeOnExit"));
|
|
|
|
|
item->setCheckable(true);
|
|
|
|
|
item->setDefaultValue(false);
|
2010-11-10 16:33:11 +01:00
|
|
|
insertItem(SwitchModeOnExit, item);
|
2010-10-08 17:44:11 +02:00
|
|
|
|
2012-03-13 13:50:05 +01:00
|
|
|
item = new SavedAction(this);
|
|
|
|
|
item->setSettingsKey(debugModeGroup, QLatin1String("RaiseOnInterrupt"));
|
|
|
|
|
item->setCheckable(true);
|
|
|
|
|
item->setDefaultValue(true);
|
|
|
|
|
insertItem(RaiseOnInterrupt, item);
|
|
|
|
|
|
2010-11-10 16:33:11 +01:00
|
|
|
item = new SavedAction(this);
|
2009-04-09 16:51:13 +02:00
|
|
|
item->setSettingsKey(debugModeGroup, QLatin1String("AutoQuit"));
|
2010-02-16 11:28:41 +01:00
|
|
|
item->setText(tr("Automatically Quit Debugger"));
|
2009-03-24 15:01:35 +01:00
|
|
|
item->setCheckable(true);
|
2009-06-26 13:17:44 +02:00
|
|
|
item->setDefaultValue(false);
|
2010-11-10 16:33:11 +01:00
|
|
|
insertItem(AutoQuit, item);
|
2009-03-19 09:32:09 +01:00
|
|
|
|
2012-04-17 10:00:40 +02:00
|
|
|
item = new SavedAction(this);
|
|
|
|
|
item->setSettingsKey(debugModeGroup, QLatin1String("AttemptQuickStart"));
|
|
|
|
|
item->setCheckable(true);
|
|
|
|
|
item->setDefaultValue(false);
|
|
|
|
|
insertItem(AttemptQuickStart, item);
|
|
|
|
|
|
2010-11-10 16:33:11 +01:00
|
|
|
item = new SavedAction(this);
|
2009-04-09 16:51:13 +02:00
|
|
|
item->setSettingsKey(debugModeGroup, QLatin1String("UseToolTips"));
|
2009-09-23 16:11:25 +02:00
|
|
|
item->setText(tr("Use tooltips in main editor when debugging"));
|
2009-10-01 11:22:44 +02:00
|
|
|
item->setToolTip(tr("Checking this will enable tooltips for variable "
|
|
|
|
|
"values during debugging. Since this can slow down debugging and "
|
|
|
|
|
"does not provide reliable information as it does not use scope "
|
|
|
|
|
"information, it is switched off by default."));
|
2009-03-23 12:28:02 +01:00
|
|
|
item->setCheckable(true);
|
2009-06-26 13:17:44 +02:00
|
|
|
item->setDefaultValue(false);
|
2010-11-10 16:33:11 +01:00
|
|
|
insertItem(UseToolTipsInMainEditor, item);
|
2009-09-23 16:11:25 +02:00
|
|
|
|
2010-11-10 16:33:11 +01:00
|
|
|
item = new SavedAction(this);
|
2009-09-23 16:11:25 +02:00
|
|
|
item->setSettingsKey(debugModeGroup, QLatin1String("UseToolTipsInLocalsView"));
|
2010-02-16 11:28:41 +01:00
|
|
|
item->setText(tr("Use Tooltips in Locals View When Debugging"));
|
2009-10-01 11:22:44 +02:00
|
|
|
item->setToolTip(tr("Checking this will enable tooltips in the locals "
|
|
|
|
|
"view during debugging."));
|
2009-09-23 16:11:25 +02:00
|
|
|
item->setCheckable(true);
|
|
|
|
|
item->setDefaultValue(false);
|
2010-11-10 16:33:11 +01:00
|
|
|
insertItem(UseToolTipsInLocalsView, item);
|
2009-03-23 12:28:02 +01:00
|
|
|
|
2010-11-10 16:33:11 +01:00
|
|
|
item = new SavedAction(this);
|
2009-10-01 11:22:44 +02:00
|
|
|
item->setSettingsKey(debugModeGroup, QLatin1String("UseToolTipsInBreakpointsView"));
|
2010-02-16 11:28:41 +01:00
|
|
|
item->setText(tr("Use Tooltips in Breakpoints View When Debugging"));
|
2009-10-01 11:22:44 +02:00
|
|
|
item->setToolTip(tr("Checking this will enable tooltips in the breakpoints "
|
|
|
|
|
"view during debugging."));
|
|
|
|
|
item->setCheckable(true);
|
|
|
|
|
item->setDefaultValue(false);
|
2010-11-10 16:33:11 +01:00
|
|
|
insertItem(UseToolTipsInBreakpointsView, item);
|
2009-10-01 11:22:44 +02:00
|
|
|
|
2010-11-10 16:33:11 +01:00
|
|
|
item = new SavedAction(this);
|
2009-10-01 11:22:44 +02:00
|
|
|
item->setSettingsKey(debugModeGroup, QLatin1String("UseAddressInBreakpointsView"));
|
2010-02-16 11:28:41 +01:00
|
|
|
item->setText(tr("Show Address Data in Breakpoints View When Debugging"));
|
2009-10-01 11:22:44 +02:00
|
|
|
item->setToolTip(tr("Checking this will show a column with address "
|
|
|
|
|
"information in the breakpoint view during debugging."));
|
|
|
|
|
item->setCheckable(true);
|
|
|
|
|
item->setDefaultValue(false);
|
2010-11-10 16:33:11 +01:00
|
|
|
insertItem(UseAddressInBreakpointsView, item);
|
2009-10-01 11:22:44 +02:00
|
|
|
|
2010-11-10 16:33:11 +01:00
|
|
|
item = new SavedAction(this);
|
2009-10-01 11:22:44 +02:00
|
|
|
item->setSettingsKey(debugModeGroup, QLatin1String("UseAddressInStackView"));
|
2010-02-16 11:28:41 +01:00
|
|
|
item->setText(tr("Show Address Data in Stack View When Debugging"));
|
2009-10-01 11:22:44 +02:00
|
|
|
item->setToolTip(tr("Checking this will show a column with address "
|
|
|
|
|
"information in the stack view during debugging."));
|
|
|
|
|
item->setCheckable(true);
|
|
|
|
|
item->setDefaultValue(false);
|
2010-11-10 16:33:11 +01:00
|
|
|
insertItem(UseAddressInStackView, item);
|
|
|
|
|
item = new SavedAction(this);
|
2009-10-01 11:22:44 +02:00
|
|
|
|
2009-04-09 16:51:13 +02:00
|
|
|
item->setSettingsKey(debugModeGroup, QLatin1String("ListSourceFiles"));
|
2010-02-16 11:28:41 +01:00
|
|
|
item->setText(tr("List Source Files"));
|
2009-03-27 12:25:58 +01:00
|
|
|
item->setCheckable(true);
|
2009-06-26 13:17:44 +02:00
|
|
|
item->setDefaultValue(false);
|
2010-11-10 16:33:11 +01:00
|
|
|
insertItem(ListSourceFiles, item);
|
2009-03-19 09:32:09 +01:00
|
|
|
|
2010-11-10 16:33:11 +01:00
|
|
|
item = new SavedAction(this);
|
2009-04-09 16:51:13 +02:00
|
|
|
item->setSettingsKey(debugModeGroup, QLatin1String("SkipKnownFrames"));
|
2010-02-16 11:28:41 +01:00
|
|
|
item->setText(tr("Skip Known Frames"));
|
2009-03-27 13:04:23 +01:00
|
|
|
item->setCheckable(true);
|
2009-06-26 13:17:44 +02:00
|
|
|
item->setDefaultValue(false);
|
2010-11-10 16:33:11 +01:00
|
|
|
insertItem(SkipKnownFrames, item);
|
2009-05-25 17:19:42 +02:00
|
|
|
|
2010-11-10 16:33:11 +01:00
|
|
|
item = new SavedAction(this);
|
2009-05-25 17:19:42 +02:00
|
|
|
item->setSettingsKey(debugModeGroup, QLatin1String("EnableReverseDebugging"));
|
2010-02-16 11:28:41 +01:00
|
|
|
item->setText(tr("Enable Reverse Debugging"));
|
2009-05-25 17:19:42 +02:00
|
|
|
item->setCheckable(true);
|
2009-06-26 13:17:44 +02:00
|
|
|
item->setDefaultValue(false);
|
2010-11-10 16:33:11 +01:00
|
|
|
insertItem(EnableReverseDebugging, item);
|
2009-03-19 09:32:09 +01:00
|
|
|
|
2010-03-25 16:54:23 +01:00
|
|
|
#ifdef Q_OS_WIN
|
2010-11-10 16:33:11 +01:00
|
|
|
item = new RegisterPostMortemAction(this);
|
2010-03-25 16:54:23 +01:00
|
|
|
item->setSettingsKey(debugModeGroup, QLatin1String("RegisterForPostMortem"));
|
|
|
|
|
item->setText(tr("Register For Post-Mortem Debugging"));
|
|
|
|
|
item->setCheckable(true);
|
|
|
|
|
item->setDefaultValue(false);
|
2010-11-10 16:33:11 +01:00
|
|
|
insertItem(RegisterForPostMortem, item);
|
2010-03-25 16:54:23 +01:00
|
|
|
#endif
|
|
|
|
|
|
2010-11-10 16:33:11 +01:00
|
|
|
item = new SavedAction(this);
|
2009-04-09 16:51:13 +02:00
|
|
|
item->setSettingsKey(debugModeGroup, QLatin1String("AllPluginBreakpoints"));
|
2009-04-14 14:24:45 +02:00
|
|
|
item->setDefaultValue(true);
|
2010-11-10 16:33:11 +01:00
|
|
|
insertItem(AllPluginBreakpoints, item);
|
2009-03-19 09:32:09 +01:00
|
|
|
|
2010-11-10 16:33:11 +01:00
|
|
|
item = new SavedAction(this);
|
2009-04-09 16:51:13 +02:00
|
|
|
item->setSettingsKey(debugModeGroup, QLatin1String("SelectedPluginBreakpoints"));
|
2009-06-26 13:17:44 +02:00
|
|
|
item->setDefaultValue(false);
|
2010-11-10 16:33:11 +01:00
|
|
|
insertItem(SelectedPluginBreakpoints, item);
|
2009-03-19 09:32:09 +01:00
|
|
|
|
2010-11-10 16:33:11 +01:00
|
|
|
item = new SavedAction(this);
|
2009-04-09 16:51:13 +02:00
|
|
|
item->setSettingsKey(debugModeGroup, QLatin1String("NoPluginBreakpoints"));
|
2009-06-26 13:17:44 +02:00
|
|
|
item->setDefaultValue(false);
|
2010-11-10 16:33:11 +01:00
|
|
|
insertItem(NoPluginBreakpoints, item);
|
2009-03-19 09:32:09 +01:00
|
|
|
|
2010-11-10 16:33:11 +01:00
|
|
|
item = new SavedAction(this);
|
2009-04-09 16:51:13 +02:00
|
|
|
item->setSettingsKey(debugModeGroup, QLatin1String("SelectedPluginBreakpointsPattern"));
|
2009-08-19 12:32:23 +02:00
|
|
|
item->setDefaultValue(QLatin1String(".*"));
|
2010-11-10 16:33:11 +01:00
|
|
|
insertItem(SelectedPluginBreakpointsPattern, item);
|
2009-04-02 15:06:24 +02:00
|
|
|
|
2010-11-10 16:33:11 +01:00
|
|
|
item = new SavedAction(this);
|
2009-04-09 16:51:13 +02:00
|
|
|
item->setSettingsKey(debugModeGroup, QLatin1String("MaximalStackDepth"));
|
2009-04-02 15:06:24 +02:00
|
|
|
item->setDefaultValue(20);
|
2010-11-10 16:33:11 +01:00
|
|
|
insertItem(MaximalStackDepth, item);
|
2009-03-18 10:04:02 +01:00
|
|
|
|
2010-11-10 16:33:11 +01:00
|
|
|
item = new SavedAction(this);
|
2010-02-16 11:28:41 +01:00
|
|
|
item->setText(tr("Reload Full Stack"));
|
2010-11-10 16:33:11 +01:00
|
|
|
insertItem(ExpandStack, item);
|
2009-04-06 17:27:15 +02:00
|
|
|
|
2010-11-10 16:33:11 +01:00
|
|
|
item = new SavedAction(this);
|
2010-03-29 18:44:02 +02:00
|
|
|
item->setText(tr("Create Full Backtrace"));
|
2010-11-10 16:33:11 +01:00
|
|
|
insertItem(CreateFullBacktrace, item);
|
2010-03-29 18:44:02 +02:00
|
|
|
|
2010-11-10 16:33:11 +01:00
|
|
|
item = new SavedAction(this);
|
2009-12-09 15:23:49 +01:00
|
|
|
item->setSettingsKey(debugModeGroup, QLatin1String("WatchdogTimeout"));
|
|
|
|
|
item->setDefaultValue(20);
|
2010-11-10 16:33:11 +01:00
|
|
|
insertItem(GdbWatchdogTimeout, item);
|
|
|
|
|
}
|
2009-12-09 15:23:49 +01:00
|
|
|
|
2010-11-10 16:33:11 +01:00
|
|
|
DebuggerSettings::~DebuggerSettings()
|
|
|
|
|
{
|
2012-04-11 09:16:06 +02:00
|
|
|
ExtensionSystem::PluginManager *pluginManager =
|
|
|
|
|
ExtensionSystem::PluginManager::instance();
|
|
|
|
|
QObject *o = pluginManager->getObjectByName(Constants::SETTINGS_DIALOG);
|
|
|
|
|
if (o)
|
|
|
|
|
pluginManager->removeObject(o);
|
|
|
|
|
o = pluginManager->getObjectByName(Constants::USE_ALTERNATING_ROW_COLORS);
|
|
|
|
|
if (o)
|
|
|
|
|
pluginManager->removeObject(o);
|
|
|
|
|
o = pluginManager->getObjectByName(Constants::SORT_STRUCT_MEMBERS);
|
|
|
|
|
if (o)
|
|
|
|
|
pluginManager->removeObject(o);
|
|
|
|
|
|
2010-11-10 16:33:11 +01:00
|
|
|
qDeleteAll(m_items);
|
2009-03-18 10:04:02 +01:00
|
|
|
}
|
|
|
|
|
|
2010-11-10 16:33:11 +01:00
|
|
|
void DebuggerSettings::insertItem(int code, SavedAction *item)
|
|
|
|
|
{
|
|
|
|
|
QTC_ASSERT(!m_items.contains(code),
|
|
|
|
|
qDebug() << code << item->toString(); return);
|
|
|
|
|
QTC_ASSERT(item->settingsKey().isEmpty() || item->defaultValue().isValid(),
|
|
|
|
|
qDebug() << "NO DEFAULT VALUE FOR " << item->settingsKey());
|
|
|
|
|
m_items[code] = item;
|
|
|
|
|
}
|
2009-04-09 16:51:13 +02:00
|
|
|
|
2010-11-10 16:33:11 +01:00
|
|
|
void DebuggerSettings::readSettings()
|
|
|
|
|
{
|
|
|
|
|
foreach (SavedAction *item, m_items)
|
|
|
|
|
item->readSettings(m_settings);
|
|
|
|
|
}
|
2009-04-08 12:11:30 +02:00
|
|
|
|
2010-11-10 16:33:11 +01:00
|
|
|
void DebuggerSettings::writeSettings() const
|
2009-03-19 10:54:27 +01:00
|
|
|
{
|
2010-11-10 16:33:11 +01:00
|
|
|
foreach (SavedAction *item, m_items)
|
|
|
|
|
item->writeSettings(m_settings);
|
2009-03-19 10:54:27 +01:00
|
|
|
}
|
|
|
|
|
|
2010-11-10 16:33:11 +01:00
|
|
|
SavedAction *DebuggerSettings::item(int code) const
|
2009-03-19 10:54:27 +01:00
|
|
|
{
|
2010-11-10 16:33:11 +01:00
|
|
|
QTC_ASSERT(m_items.value(code, 0), qDebug() << "CODE: " << code; return 0);
|
|
|
|
|
return m_items.value(code, 0);
|
2009-03-19 10:54:27 +01:00
|
|
|
}
|
|
|
|
|
|
2010-11-10 16:33:11 +01:00
|
|
|
QString DebuggerSettings::dump() const
|
2009-03-19 10:54:27 +01:00
|
|
|
{
|
2010-11-10 16:33:11 +01:00
|
|
|
QString out;
|
|
|
|
|
QTextStream ts(&out);
|
|
|
|
|
ts << "Debugger settings: ";
|
|
|
|
|
foreach (SavedAction *item, m_items) {
|
|
|
|
|
QString key = item->settingsKey();
|
|
|
|
|
if (!key.isEmpty()) {
|
|
|
|
|
const QString current = item->value().toString();
|
|
|
|
|
const QString default_ = item->defaultValue().toString();
|
2011-03-04 16:21:57 +01:00
|
|
|
ts << '\n' << key << ": " << current
|
2010-11-10 16:33:11 +01:00
|
|
|
<< " (default: " << default_ << ")";
|
|
|
|
|
if (current != default_)
|
|
|
|
|
ts << " ***";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return out;
|
2009-03-19 10:54:27 +01:00
|
|
|
}
|
|
|
|
|
|
2009-03-18 10:04:02 +01:00
|
|
|
} // namespace Internal
|
|
|
|
|
} // namespace Debugger
|
|
|
|
|
|