...
 
Commits (34)
The QtCreator 1.2.1 release is a bug fix release and updates translations.
Below is a list of relevant changes. You can find a complete list of changes
within the logs of Qt Creator's sources. Simply check it out from the public git
repository e.g.,
git clone git://gitorious.org/qt-creator/qt-creator.git
git log --pretty=oneline v1.2.0..v1.2.1
Building and Running
* Fixed crash when clicking on the Build Settings tab with an invalid Qt version.
* Fixed crash when removing an active .pro file outside Qt Creator.
Editor
* Fixed crash when completing function-like arguments
Debugging
* Fixed problem with GDB debugging after first debugging run
* Fixed display of debugging helper status in some cases
* Disallow starting CDB debugger more than once
* Additional debug output for the CDB debugger
* Make loading debugging helpers more reliable with GDB
* Fixed regression in QVariant dumper
* Removed QtGui dependency from debugging helpers
* Made it possible to build the debugging helpers for Qt 4.4 again
I18N:
* Fixed Russian translation
BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV {
font-family: Arial, Geneva, Helvetica, sans-serif;
}
H1 {
text-align: center;
font-size: 160%;
}
H2 {
font-size: 120%;
}
H3 {
font-size: 100%;
}
h3.fn,span.fn h3.fn,span.fn
{ {
margin-left: 1cm; background-color: #eee;
text-indent: -1cm; border-width: 1px;
border-style: solid;
border-color: #ddd;
font-weight: bold;
padding: 6px 0px 6px 10px;
margin: 42px 0px 0px 0px;
}
hr {
border: 0;
color: #a0a0a0;
background-color: #ccc;
height: 1px;
width: 100%;
text-align: left;
margin: 34px 0px 34px 0px;
}
table.valuelist {
border-width: 1px 1px 1px 1px;
border-style: solid;
border-color: #dddddd;
border-collapse: collapse;
background-color: #f0f0f0;
}
table.indextable {
border-width: 1px 1px 1px 1px;
border-collapse: collapse;
background-color: #f0f0f0;
border-color:#555;
font-size: 110%;
}
table td.largeindex {
border-width: 1px 1px 1px 1px;
border-collapse: collapse;
background-color: #f0f0f0;
border-color:#555;
font-size: 120%;
}
table.valuelist th {
border-width: 1px 1px 1px 2px;
padding: 4px;
border-style: solid;
border-color: #666;
color:white;
background-color:#666;
}
th.titleheader {
border-width: 1px 0px 1px 0px;
padding: 4px;
border-style: solid;
border-color: #444;
color:white;
background-color:#555555;
font-size: 110%;
}
th.largeheader {
border-width: 1px 0px 1px 0px;
padding: 4px;
border-style: solid;
border-color: #444;
color:white;
background-color:#555555;
font-size: 120%;
}
p {
margin-left: 4px;
margin-top: 8px;
margin-bottom: 8px;
} }
a:link a:link
{ {
color: #004faf; color: #0046ad;
text-decoration: none text-decoration: none
} }
...@@ -16,14 +105,28 @@ a:visited ...@@ -16,14 +105,28 @@ a:visited
text-decoration: none text-decoration: none
} }
td.postheader a.obsolete
{
color: #661100;
text-decoration: none
}
a.compat
{
color: #661100;
text-decoration: none
}
a.obsolete:visited
{ {
font-family: sans-serif color: #995500;
text-decoration: none
} }
tr.address a.compat:visited
{ {
font-family: sans-serif color: #995500;
text-decoration: none
} }
body body
...@@ -32,6 +135,34 @@ body ...@@ -32,6 +135,34 @@ body
color: black color: black
} }
table.generic, table.annotated
{
border-width: 1px;
border-color:#bbb;
border-style:solid;
border-collapse:collapse;
}
table td.memItemLeft {
width: 180px;
padding: 2px 0px 0px 8px;
margin: 4px;
border-width: 1px;
border-color: #E0E0E0;
border-style: none;
font-size: 100%;
white-space: nowrap
}
table td.memItemRight {
padding: 2px 8px 0px 8px;
margin: 4px;
border-width: 1px;
border-color: #E0E0E0;
border-style: none;
font-size: 100%;
}
table tr.odd { table tr.odd {
background: #f0f0f0; background: #f0f0f0;
color: black; color: black;
...@@ -53,17 +184,17 @@ table.annotated td { ...@@ -53,17 +184,17 @@ table.annotated td {
table tr pre table tr pre
{ {
padding-top: none; padding-top: 0px;
padding-bottom: none; padding-bottom: 0px;
padding-left: none; padding-left: 0px;
padding-right: none; padding-right: 0px;
border: none; border: none;
background: none background: none
} }
tr.qt-style tr.qt-style
{ {
background: #a2c511; background: #96E066;
color: black color: black
} }
...@@ -75,6 +206,14 @@ body pre ...@@ -75,6 +206,14 @@ body pre
color: black color: black
} }
table tr.qt-code pre
{
padding: 0.2em;
border: #e7e7e7 1px solid;
background: #f1f1f1;
color: black
}
span.preprocessor, span.preprocessor a span.preprocessor, span.preprocessor a
{ {
color: darkblue; color: darkblue;
...@@ -91,6 +230,11 @@ span.string,span.char ...@@ -91,6 +230,11 @@ span.string,span.char
color: darkgreen; color: darkgreen;
} }
.title
{
text-align: center
}
.subtitle .subtitle
{ {
font-size: 0.8em font-size: 0.8em
...@@ -100,3 +244,52 @@ span.string,span.char ...@@ -100,3 +244,52 @@ span.string,span.char
{ {
font-size: 0.65em font-size: 0.65em
} }
.qmlitem {
padding: 0;
}
.qmlname {
white-space: nowrap;
font-weight: bold;
font-size: 125%;
}
.qmltype {
font-weight: bold;
font-size: 125%;
}
.qmlproto, .qmldoc {
// border-top: 1px solid #84b0c7;
}
.qmlproto {
padding: 0;
//background-color: #e4e4e4;//#d5e1e8;
//font-weight: bold;
//-webkit-border-top-left-radius: 8px;
//-webkit-border-top-right-radius: 8px;
//-moz-border-radius-topleft: 8px;
//-moz-border-radius-topright: 8px;
}
.qmldoc {
border-top: 1px solid #e4e4e4;
//padding: 2px 5px;
//background-color: #eef3f5;
//border-top-width: 0;
//-webkit-border-bottom-left-radius: 8px;
//-webkit-border-bottom-right-radius: 8px;
//-moz-border-radius-bottomleft: 8px;
//-moz-border-radius-bottomright: 8px;
}
.qmldoc p, .qmldoc dl, .qmldoc ul {
//margin: 6px 0;
}
*.qmlitem p {
//margin-top: 0px;
//margin-bottom: 0px;
}
doc/images/qtcreator-screenshots.png

243 KB | W: | H:

doc/images/qtcreator-screenshots.png

81.2 KB | W: | H:

doc/images/qtcreator-screenshots.png
doc/images/qtcreator-screenshots.png
doc/images/qtcreator-screenshots.png
doc/images/qtcreator-screenshots.png
  • 2-up
  • Swipe
  • Onion skin
This diff is collapsed.
This diff is collapsed.
...@@ -9,24 +9,26 @@ sourcedirs = $SRCDIR ...@@ -9,24 +9,26 @@ sourcedirs = $SRCDIR
imagedirs = $SRCDIR/images imagedirs = $SRCDIR/images
outputdir = $OUTDIR outputdir = $OUTDIR
exampledirs = $SRCDIR exampledirs = $SRCDIR
indexes = qt.index
extraimages.HTML = qt-logo \ extraimages.HTML = qt-logo \
trolltech-logo qtcreator-screenshots
sources.fileextensions = "qtcreator.qdoc addressbook-sdk.qdoc" sources.fileextensions = "qtcreator.qdoc addressbook-sdk.qdoc"
qhp.projects = QtCreator qhp.projects = QtCreator
qhp.QtCreator.file = qtcreator.qhp qhp.QtCreator.file = qtcreator.qhp
qhp.QtCreator.namespace = com.nokia.qtcreator.120 qhp.QtCreator.namespace = com.nokia.qtcreator.121
qhp.QtCreator.virtualFolder = doc qhp.QtCreator.virtualFolder = doc
qhp.QtCreator.indexTitle = Qt Creator qhp.QtCreator.indexTitle = Qt Creator
qhp.QtCreator.indexRoot = qhp.QtCreator.indexRoot =
qhp.QtCreator.extraFiles = classic.css \ qhp.QtCreator.extraFiles = classic.css \
images/qt-logo.png images/qt-logo.png \
qhp.QtCreator.filterAttributes = qtcreator 1.2.0 images/qtcreator-screenshots.png
qhp.QtCreator.customFilters.QtCreator.name = Qt Creator 1.2.0 qhp.QtCreator.filterAttributes = qtcreator 1.2.1
qhp.QtCreator.customFilters.QtCreator.filterAttributes = qtcreator 1.2.0 qhp.QtCreator.customFilters.QtCreator.name = Qt Creator 1.2.1
qhp.QtCreator.customFilters.QtCreator.filterAttributes = qtcreator 1.2.1
# macros.qdocconf # macros.qdocconf
...@@ -85,7 +87,6 @@ macro.i81 = "\\o{8,1}" ...@@ -85,7 +87,6 @@ macro.i81 = "\\o{8,1}"
macro.i91 = "\\o{9,1}" macro.i91 = "\\o{9,1}"
macro.img = "\\image" macro.img = "\\image"
macro.endquote = "\\endquotation" macro.endquote = "\\endquotation"
spurious = "Missing comma in .*" \ spurious = "Missing comma in .*" \
"Missing pattern .*" "Missing pattern .*"
...@@ -189,18 +190,26 @@ HTML.stylesheets = classic.css ...@@ -189,18 +190,26 @@ HTML.stylesheets = classic.css
HTML.postheader = "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\">\n" \ HTML.postheader = "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\">\n" \
"<tr>\n" \ "<tr>\n" \
"<td align=\"left\" valign=\"top\" width=\"32\">" \ "<td align=\"left\" valign=\"top\" width=\"32\">" \
"<img src=\"images/qt-logo.png\" align=\"left\" width=\"32\" height=\"32\" border=\"0\" />" \ "<a href=\"http://qt.nokia.com/\"><img src=\"images/qt-logo.png\" align=\"left\" border=\"0\" /></a>" \
"</td>\n" \ "</td>\n" \
"<td width=\"1\">&nbsp;&nbsp;</td>" \ "<td width=\"1\">&nbsp;&nbsp;</td>" \
"<td class=\"postheader\" valign=\"center\">" \ "<td class=\"postheader\" valign=\"center\">" \
"<a href=\"qtcreator-manual.html\">" \ "<a href=\"index.html\">" \
"<font color=\"#004faf\">Home</font></a>" \ "<font color=\"#004faf\">Home</font></a>&nbsp;&middot; " \
"</td>\n" \ "<a href=\"creator-code-editor.html\">" \
"<td align=\"right\" valign=\"top\" width=\"230\"></td></tr></table><br>" "<font color=\"#004faf\">Editor</font></a>&nbsp;&middot; " \
"<a href=\"creator-navigation.html\">" \
"<font color=\"#004faf\">Code Navigation</font></a>&nbsp;&middot; " \
"<a href=\"creator-keyboard-shortcuts.html\">" \
"<font color=\"#004faf\">Shortcuts</font></a>&nbsp;&middot; " \
"<a href=\"http://qt.gitorious.org/qt-creator/pages/Home\">" \
"<font color=\"#004faf\">Wiki</font></a>" \
"</td>" \
"</tr></table>"
HTML.footer = "<p /><address><hr /><div align=\"center\">\n" \ HTML.footer = "<p /><address><hr /><div align=\"center\">\n" \
"<table width=\"100%\" cellspacing=\"0\" border=\"0\"><tr class=\"address\">\n" \ "<table width=\"100%\" cellspacing=\"0\" border=\"0\"><tr class=\"address\">\n" \
"<td width=\"30%\" align=\"left\">Copyright &copy; 2009 Nokia</td>\n" \ "<td width=\"40%\" align=\"left\">Copyright &copy; 2009 Nokia Corporation and/or its subsidiary(-ies)</td>\n" \
"<td width=\"40%\" align=\"center\">&nbsp;</td>\n" \ "<td width=\"20%\" align=\"center\"><a href=\"trademarks.html\">Trademarks</a></td>\n" \
"<td width=\"30%\" align=\"right\"><div align=\"right\">Qt Creator 1.2.0</div></td>\n" \ "<td width=\"40%\" align=\"right\"><div align=\"right\">Qt Creator 1.2.1</div></td>\n" \
"</tr></table></div></address>" "</tr></table></div></address>"
...@@ -44,15 +44,24 @@ ...@@ -44,15 +44,24 @@
#include <QtCore/QObject> #include <QtCore/QObject>
#include <QtCore/QPointer> #include <QtCore/QPointer>
#include <QtCore/QString> #include <QtCore/QString>
#include <QtCore/QSharedPointer>
#include <QtCore/QSharedDataPointer>
#include <QtCore/QTextCodec> #include <QtCore/QTextCodec>
#include <QtCore/QVector> #include <QtCore/QVector>
#if QT_VERSION >= 0x040500
#include <QtCore/QSharedPointer>
#include <QtCore/QSharedDataPointer>
#include <QtCore/QWeakPointer> #include <QtCore/QWeakPointer>
#endif
int qtGhVersion = QT_VERSION; int qtGhVersion = QT_VERSION;
#ifdef QT_GUI_LIB #ifndef USE_QT_GUI
# ifdef QT_GUI_LIB
# define USE_QT_GUI 1
# endif
#endif
#if USE_QT_GUI
# include <QtGui/QWidget> # include <QtGui/QWidget>
# include <QtGui/QPixmap> # include <QtGui/QPixmap>
# include <QtGui/QImage> # include <QtGui/QImage>
...@@ -1296,9 +1305,9 @@ static void qDumpQHashNode(QDumper &d) ...@@ -1296,9 +1305,9 @@ static void qDumpQHashNode(QDumper &d)
d.disarm(); d.disarm();
} }
#if USE_QT_GUI
static void qDumpQImage(QDumper &d) static void qDumpQImage(QDumper &d)
{ {
#ifdef QT_GUI_LIB
const QImage &im = *reinterpret_cast<const QImage *>(d.data); const QImage &im = *reinterpret_cast<const QImage *>(d.data);
P(d, "value", "(" << im.width() << "x" << im.height() << ")"); P(d, "value", "(" << im.width() << "x" << im.height() << ")");
P(d, "type", NS"QImage"); P(d, "type", NS"QImage");
...@@ -1312,14 +1321,12 @@ static void qDumpQImage(QDumper &d) ...@@ -1312,14 +1321,12 @@ static void qDumpQImage(QDumper &d)
d.endHash(); d.endHash();
} }
d.disarm(); d.disarm();
#else
Q_UNUSED(d);
#endif
} }
#endif
#if USE_QT_GUI
static void qDumpQImageData(QDumper &d) static void qDumpQImageData(QDumper &d)
{ {
#ifdef QT_GUI_LIB
const QImage &im = *reinterpret_cast<const QImage *>(d.data); const QImage &im = *reinterpret_cast<const QImage *>(d.data);
const QByteArray ba(QByteArray::fromRawData((const char*)im.bits(), im.numBytes())); const QByteArray ba(QByteArray::fromRawData((const char*)im.bits(), im.numBytes()));
P(d, "type", NS"QImageData"); P(d, "type", NS"QImageData");
...@@ -1334,10 +1341,8 @@ static void qDumpQImageData(QDumper &d) ...@@ -1334,10 +1341,8 @@ static void qDumpQImageData(QDumper &d)
P(d, "value", ba); P(d, "value", ba);
#endif #endif
d.disarm(); d.disarm();
#else
Q_UNUSED(d);
#endif
} }
#endif
static void qDumpQList(QDumper &d) static void qDumpQList(QDumper &d)
{ {
...@@ -2020,18 +2025,16 @@ static void qDumpQObjectSlotList(QDumper &d) ...@@ -2020,18 +2025,16 @@ static void qDumpQObjectSlotList(QDumper &d)
} }
#if USE_QT_GUI
static void qDumpQPixmap(QDumper &d) static void qDumpQPixmap(QDumper &d)
{ {
#ifdef QT_GUI_LIB
const QPixmap &im = *reinterpret_cast<const QPixmap *>(d.data); const QPixmap &im = *reinterpret_cast<const QPixmap *>(d.data);
P(d, "value", "(" << im.width() << "x" << im.height() << ")"); P(d, "value", "(" << im.width() << "x" << im.height() << ")");
P(d, "type", NS"QPixmap"); P(d, "type", NS"QPixmap");
P(d, "numchild", "0"); P(d, "numchild", "0");
d.disarm(); d.disarm();
#else
Q_UNUSED(d);
#endif
} }
#endif
static void qDumpQSet(QDumper &d) static void qDumpQSet(QDumper &d)
{ {
...@@ -2078,6 +2081,7 @@ static void qDumpQSet(QDumper &d) ...@@ -2078,6 +2081,7 @@ static void qDumpQSet(QDumper &d)
d.disarm(); d.disarm();
} }
#if QT_VERSION >= 0x040500
static void qDumpQSharedPointer(QDumper &d) static void qDumpQSharedPointer(QDumper &d)
{ {
const QSharedPointer<int> &ptr = const QSharedPointer<int> &ptr =
...@@ -2116,6 +2120,7 @@ static void qDumpQSharedPointer(QDumper &d) ...@@ -2116,6 +2120,7 @@ static void qDumpQSharedPointer(QDumper &d)
} }
d.disarm(); d.disarm();
} }
#endif
static void qDumpQString(QDumper &d) static void qDumpQString(QDumper &d)
{ {
...@@ -2243,7 +2248,7 @@ static void qDumpQVariant(QDumper &d) ...@@ -2243,7 +2248,7 @@ static void qDumpQVariant(QDumper &d)
if (isInvalid) { if (isInvalid) {
P(d, "value", "(invalid)"); P(d, "value", "(invalid)");
} else if (value.isEmpty()) { } else if (value.isEmpty()) {
P(d, "value", "(" << v.typeName() << ") " << qPrintable(value)); P(d, "value", "(" << v.typeName() << ") ");
} else { } else {
QByteArray ba; QByteArray ba;
ba += '('; ba += '(';
...@@ -2251,7 +2256,7 @@ static void qDumpQVariant(QDumper &d) ...@@ -2251,7 +2256,7 @@ static void qDumpQVariant(QDumper &d)
ba += ") "; ba += ") ";
ba += qPrintable(value); ba += qPrintable(value);
P(d, "value", ba); P(d, "value", ba);
P(d, "valueencoded", "4"); P(d, "valueencoded", "5");
} }
P(d, "type", NS"QVariant"); P(d, "type", NS"QVariant");
P(d, "numchild", (isInvalid ? "0" : "1")); P(d, "numchild", (isInvalid ? "0" : "1"));
...@@ -2315,6 +2320,7 @@ static void qDumpQVector(QDumper &d) ...@@ -2315,6 +2320,7 @@ static void qDumpQVector(QDumper &d)
d.disarm(); d.disarm();
} }
#if QT_VERSION >= 0x040500
static void qDumpQWeakPointer(QDumper &d) static void qDumpQWeakPointer(QDumper &d)
{ {
const int v = sizeof(void *); const int v = sizeof(void *);
...@@ -2352,6 +2358,7 @@ static void qDumpQWeakPointer(QDumper &d) ...@@ -2352,6 +2358,7 @@ static void qDumpQWeakPointer(QDumper &d)
} }
d.disarm(); d.disarm();
} }
#endif
static void qDumpStdList(QDumper &d) static void qDumpStdList(QDumper &d)
{ {
...@@ -2691,10 +2698,12 @@ static void handleProtocolVersion2and3(QDumper & d) ...@@ -2691,10 +2698,12 @@ static void handleProtocolVersion2and3(QDumper & d)
qDumpStdList(d); qDumpStdList(d);
break; break;
case 'I': case 'I':
#if USE_QT_GUI
if (isEqual(type, "QImage")) if (isEqual(type, "QImage"))
qDumpQImage(d); qDumpQImage(d);
else if (isEqual(type, "QImageData")) else if (isEqual(type, "QImageData"))
qDumpQImageData(d); qDumpQImageData(d);
#endif
break; break;
case 'L': case 'L':
if (isEqual(type, "QList")) if (isEqual(type, "QList"))
...@@ -2731,14 +2740,18 @@ static void handleProtocolVersion2and3(QDumper & d) ...@@ -2731,14 +2740,18 @@ static void handleProtocolVersion2and3(QDumper & d)
qDumpQObjectSlotList(d); qDumpQObjectSlotList(d);
break; break;
case 'P': case 'P':
#if USE_QT_GUI
if (isEqual(type, "QPixmap")) if (isEqual(type, "QPixmap"))
qDumpQPixmap(d); qDumpQPixmap(d);
#endif
break; break;
case 'S': case 'S':
if (isEqual(type, "QSet")) if (isEqual(type, "QSet"))
qDumpQSet(d); qDumpQSet(d);
#if QT_VERSION >= 0x040500
else if (isEqual(type, "QSharedPointer")) else if (isEqual(type, "QSharedPointer"))
qDumpQSharedPointer(d); qDumpQSharedPointer(d);
#endif
else if (isEqual(type, "QString")) else if (isEqual(type, "QString"))
qDumpQString(d); qDumpQString(d);
else if (isEqual(type, "QStringList")) else if (isEqual(type, "QStringList"))
...@@ -2775,8 +2788,11 @@ static void handleProtocolVersion2and3(QDumper & d) ...@@ -2775,8 +2788,11 @@ static void handleProtocolVersion2and3(QDumper & d)
qDumpQVector(d); qDumpQVector(d);
break; break;
case 'W': case 'W':
#if QT_VERSION >= 0x040500
if (isEqual(type, "QWeakPointer")) if (isEqual(type, "QWeakPointer"))
qDumpQWeakPointer(d); qDumpQWeakPointer(d);
#endif
break;
} }
if (!d.success) if (!d.success)
...@@ -2835,9 +2851,6 @@ void *qDumpObjectData440( ...@@ -2835,9 +2851,6 @@ void *qDumpObjectData440(
"\""NS"QMap\"," "\""NS"QMap\","
"\""NS"QMapNode\"," "\""NS"QMapNode\","
"\""NS"QModelIndex\"," "\""NS"QModelIndex\","
#if QT_VERSION >= 0x040500
"\""NS"QMultiMap\","
#endif
"\""NS"QObject\"," "\""NS"QObject\","
"\""NS"QObjectMethodList\"," // hack to get nested properties display "\""NS"QObjectMethodList\"," // hack to get nested properties display
"\""NS"QObjectPropertyList\"," "\""NS"QObjectPropertyList\","
...@@ -2847,14 +2860,19 @@ void *qDumpObjectData440( ...@@ -2847,14 +2860,19 @@ void *qDumpObjectData440(
"\""NS"QObjectSlotList\"," "\""NS"QObjectSlotList\","
// << "\""NS"QRegion\"," // << "\""NS"QRegion\","
"\""NS"QSet\"," "\""NS"QSet\","
"\""NS"QSharedPointer\","
"\""NS"QString\"," "\""NS"QString\","
"\""NS"QStringList\"," "\""NS"QStringList\","
"\""NS"QTextCodec\"," "\""NS"QTextCodec\","
"\""NS"QVariant\"," "\""NS"QVariant\","
"\""NS"QVector\"," "\""NS"QVector\","
"\""NS"QWeakPointer\"," #if USE_QT_GUI
"\""NS"QWidget\"," "\""NS"QWidget\","
#endif
#if QT_VERSION >= 0x040500
"\""NS"QMultiMap\","
"\""NS"QSharedPointer\","
"\""NS"QWeakPointer\","
#endif
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
"\"basic_string\"," "\"basic_string\","
"\"list\"," "\"list\","
...@@ -2884,7 +2902,7 @@ void *qDumpObjectData440( ...@@ -2884,7 +2902,7 @@ void *qDumpObjectData440(
<< ""NS"QString=\"" << sizeof(QString) << "\"," << ""NS"QString=\"" << sizeof(QString) << "\","
<< ""NS"QStringList=\"" << sizeof(QStringList) << "\"," << ""NS"QStringList=\"" << sizeof(QStringList) << "\","
<< ""NS"QObject=\"" << sizeof(QObject) << "\"," << ""NS"QObject=\"" << sizeof(QObject) << "\","
#ifdef QT_GUI_LIB #if USE_QT_GUI
<< ""NS"QWidget=\"" << sizeof(QWidget)<< "\"," << ""NS"QWidget=\"" << sizeof(QWidget)<< "\","
#endif #endif
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
......
TEMPLATE = lib TEMPLATE = lib
CONFIG += shared CONFIG += shared
QT = core
linux-* { linux-* {
CONFIG -= release CONFIG -= release
CONFIG += debug CONFIG += debug
} }
SOURCES=gdbmacros.cpp SOURCES=gdbmacros.cpp
true {
DEFINES += USE_QT_GUI=0
QT = core
} else {
DEFINES += USE_QT_GUI=1
QT = core gui
}
exists($$QMAKE_INCDIR_QT/QtCore/private/qobject_p.h) { exists($$QMAKE_INCDIR_QT/QtCore/private/qobject_p.h) {
DEFINES+=HAS_QOBJECT_P_H DEFINES+=HAS_QOBJECT_P_H
} }
...@@ -1759,7 +1759,7 @@ Sollen sie überschrieben werden?</translation> ...@@ -1759,7 +1759,7 @@ Sollen sie überschrieben werden?</translation>
<location line="+11"/> <location line="+11"/>
<source>From revision %1&lt;br/&gt;</source> <source>From revision %1&lt;br/&gt;</source>
<extracomment>This gets conditionally inserted as argument %8 into the description string.</extracomment> <extracomment>This gets conditionally inserted as argument %8 into the description string.</extracomment>
<translation>Revision:</translation> <translation>Revision %1&lt;br/&gt;</translation>
</message> </message>
<message> <message>
<location line="+3"/> <location line="+3"/>
......
...@@ -1721,7 +1721,7 @@ Would you like to overwrite them?</source> ...@@ -1721,7 +1721,7 @@ Would you like to overwrite them?</source>
<location line="+11"/> <location line="+11"/>
<source>From revision %1&lt;br/&gt;</source> <source>From revision %1&lt;br/&gt;</source>
<extracomment>This gets conditionally inserted as argument %8 into the description string.</extracomment> <extracomment>This gets conditionally inserted as argument %8 into the description string.</extracomment>
<translation>Revisión %1</translation> <translation>Revisión %1&lt;br/&gt;</translation>
</message> </message>
<message> <message>
<location line="+3"/> <location line="+3"/>
......
...@@ -182,8 +182,8 @@ ...@@ -182,8 +182,8 @@
<key>CFBundleIdentifier</key> <key>CFBundleIdentifier</key>
<string>com.nokia.qtcreator</string> <string>com.nokia.qtcreator</string>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
<string>1.2.0</string> <string>1.2.1</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>1.2.0</string> <string>1.2.1</string>
</dict> </dict>
</plist> </plist>
...@@ -667,7 +667,7 @@ ResolveExpression::resolveMemberExpression(const QList<Result> &baseResults, ...@@ -667,7 +667,7 @@ ResolveExpression::resolveMemberExpression(const QList<Result> &baseResults,
if (NamedType *namedTy = ty->asNamedType()) if (NamedType *namedTy = ty->asNamedType())
results += resolveMember(p, memberName, namedTy); results += resolveMember(p, memberName, namedTy);
else if (Function *fun = ty->asFunctionType()) { else if (Function *fun = ty->asFunctionType()) {
if (fun->scope()->isBlockScope() || fun->scope()->isNamespaceScope()) { if (fun->scope() && (fun->scope()->isBlockScope() || fun->scope()->isNamespaceScope())) {
ty = fun->returnType(); ty = fun->returnType();
if (ReferenceType *refTy = ty->asReferenceType()) if (ReferenceType *refTy = ty->asReferenceType())
...@@ -881,7 +881,7 @@ QList<Symbol *> ResolveClass::resolveClass(NamedType *namedTy, ...@@ -881,7 +881,7 @@ QList<Symbol *> ResolveClass::resolveClass(NamedType *namedTy,
if (Function *funTy = decl->type()->asFunctionType()) { if (Function *funTy = decl->type()->asFunctionType()) {
// QString foo("ciao"); // QString foo("ciao");
// foo. // foo.
if (funTy->scope()->isBlockScope() || funTy->scope()->isNamespaceScope()) { if (funTy->scope() && (funTy->scope()->isBlockScope() || funTy->scope()->isNamespaceScope())) {
const ResolveExpression::Result r(funTy->returnType(), decl); const ResolveExpression::Result r(funTy->returnType(), decl);
resolvedSymbols += resolveClass(r, context); resolvedSymbols += resolveClass(r, context);
} }
......
...@@ -243,8 +243,13 @@ void SavedAction::readSettings(QSettings *settings) ...@@ -243,8 +243,13 @@ void SavedAction::readSettings(QSettings *settings)
if (m_settingsGroup.isEmpty() || m_settingsKey.isEmpty()) if (m_settingsGroup.isEmpty() || m_settingsKey.isEmpty())
return; return;
settings->beginGroup(m_settingsGroup); settings->beginGroup(m_settingsGroup);
setValue(settings->value(m_settingsKey, m_defaultValue), false); QVariant var = settings->value(m_settingsKey, m_defaultValue);
//qDebug() << "READING: " << m_settingsKey << " -> " << m_value; // work around old ini files containing @Invalid() entries
if (isCheckable() && !var.isValid())
var = false;
setValue(var);
//qDebug() << "READING: " << var.isValid() << m_settingsKey << " -> " << m_value
// << " (default: " << m_defaultValue << ")" << var;
settings->endGroup(); settings->endGroup();
} }
......
<plugin name="BinEditor" version="1.2.0" compatVersion="1.2.0"> <plugin name="BinEditor" version="1.2.1" compatVersion="1.2.1">
<vendor>Nokia Corporation</vendor> <vendor>Nokia Corporation</vendor>
<copyright>(C) 2008-2009 Nokia Corporation</copyright> <copyright>(C) 2008-2009 Nokia Corporation</copyright>
<license> <license>
...@@ -19,7 +19,7 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license> ...@@ -19,7 +19,7 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license>
<description>Binary editor component.</description> <description>Binary editor component.</description>
<url>http://www.qtsoftware.com</url> <url>http://www.qtsoftware.com</url>
<dependencyList> <dependencyList>
<dependency name="Core" version="1.2.0"/> <dependency name="Core" version="1.2.1"/>
<dependency name="TextEditor" version="1.2.0"/> <dependency name="TextEditor" version="1.2.1"/>
</dependencyList> </dependencyList>
</plugin> </plugin>
<plugin name="Bookmarks" version="1.2.0" compatVersion="1.2.0"> <plugin name="Bookmarks" version="1.2.1" compatVersion="1.2.1">
<vendor>Nokia Corporation</vendor> <vendor>Nokia Corporation</vendor>
<copyright>(C) 2008-2009 Nokia Corporation</copyright> <copyright>(C) 2008-2009 Nokia Corporation</copyright>
<license> <license>
...@@ -19,8 +19,8 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license> ...@@ -19,8 +19,8 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license>
<description>Bookmarks in text editors.</description> <description>Bookmarks in text editors.</description>
<url>http://www.qtsoftware.com</url> <url>http://www.qtsoftware.com</url>
<dependencyList> <dependencyList>
<dependency name="TextEditor" version="1.2.0"/> <dependency name="TextEditor" version="1.2.1"/>
<dependency name="ProjectExplorer" version="1.2.0"/> <dependency name="ProjectExplorer" version="1.2.1"/>
<dependency name="Core" version="1.2.0"/> <dependency name="Core" version="1.2.1"/>
</dependencyList> </dependencyList>
</plugin> </plugin>
<plugin name="CMakeProjectManager" version="1.2.0" compatVersion="1.2.0"> <plugin name="CMakeProjectManager" version="1.2.1" compatVersion="1.2.1">
<vendor>Nokia Corporation</vendor> <vendor>Nokia Corporation</vendor>
<copyright>(C) 2008-2009 Nokia Corporation</copyright> <copyright>(C) 2008-2009 Nokia Corporation</copyright>
<license> <license>
...@@ -19,9 +19,9 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license> ...@@ -19,9 +19,9 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license>
<description>CMake support</description> <description>CMake support</description>
<url>http://www.qtsoftware.com</url> <url>http://www.qtsoftware.com</url>
<dependencyList> <dependencyList>
<dependency name="TextEditor" version="1.2.0"/> <dependency name="TextEditor" version="1.2.1"/>
<dependency name="ProjectExplorer" version="1.2.0"/> <dependency name="ProjectExplorer" version="1.2.1"/>
<dependency name="CppTools" version="1.2.0"/> <dependency name="CppTools" version="1.2.1"/>
<dependency name="CppEditor" version="1.2.0"/> <dependency name="CppEditor" version="1.2.1"/>
</dependencyList> </dependencyList>
</plugin> </plugin>
<plugin name="Core" version="1.2.0" compatVersion="1.2.0"> <plugin name="Core" version="1.2.1" compatVersion="1.2.1">
<vendor>Nokia Corporation</vendor> <vendor>Nokia Corporation</vendor>
<copyright>(C) 2008-2009 Nokia Corporation</copyright> <copyright>(C) 2008-2009 Nokia Corporation</copyright>
<license> <license>
......
...@@ -35,7 +35,7 @@ namespace Constants { ...@@ -35,7 +35,7 @@ namespace Constants {
#define IDE_VERSION_MAJOR 1 #define IDE_VERSION_MAJOR 1
#define IDE_VERSION_MINOR 2 #define IDE_VERSION_MINOR 2
#define IDE_VERSION_RELEASE 0 #define IDE_VERSION_RELEASE 1
#define STRINGIFY_INTERNAL(x) #x #define STRINGIFY_INTERNAL(x) #x
#define STRINGIFY(x) STRINGIFY_INTERNAL(x) #define STRINGIFY(x) STRINGIFY_INTERNAL(x)
......
<plugin name="CodePaster" version="1.2.0" compatVersion="1.2.0"> <plugin name="CodePaster" version="1.2.1" compatVersion="1.2.1">
<vendor>Nokia Corporation</vendor> <vendor>Nokia Corporation</vendor>
<copyright>(C) 2008-2009 Nokia Corporation</copyright> <copyright>(C) 2008-2009 Nokia Corporation</copyright>
<license> <license>
...@@ -19,8 +19,8 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license> ...@@ -19,8 +19,8 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license>
<description>Codepaster plugin for pushing/fetching diff from server</description> <description>Codepaster plugin for pushing/fetching diff from server</description>
<url>http://www.qtsoftware.com</url> <url>http://www.qtsoftware.com</url>
<dependencyList> <dependencyList>
<dependency name="TextEditor" version="1.2.0"/> <dependency name="TextEditor" version="1.2.1"/>
<dependency name="ProjectExplorer" version="1.2.0"/> <dependency name="ProjectExplorer" version="1.2.1"/>
<dependency name="Core" version="1.2.0"/> <dependency name="Core" version="1.2.1"/>
</dependencyList> </dependencyList>
</plugin> </plugin>
<plugin name="CppEditor" version="1.2.0" compatVersion="1.2.0"> <plugin name="CppEditor" version="1.2.1" compatVersion="1.2.1">
<vendor>Nokia Corporation</vendor> <vendor>Nokia Corporation</vendor>
<copyright>(C) 2008-2009 Nokia Corporation</copyright> <copyright>(C) 2008-2009 Nokia Corporation</copyright>
<license> <license>
...@@ -19,8 +19,8 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license> ...@@ -19,8 +19,8 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license>
<description>C/C++ editor component.</description> <description>C/C++ editor component.</description>
<url>http://www.qtsoftware.com</url> <url>http://www.qtsoftware.com</url>
<dependencyList> <dependencyList>
<dependency name="Core" version="1.2.0"/> <dependency name="Core" version="1.2.1"/>
<dependency name="TextEditor" version="1.2.0"/> <dependency name="TextEditor" version="1.2.1"/>
<dependency name="CppTools" version="1.2.0"/> <dependency name="CppTools" version="1.2.1"/>
</dependencyList> </dependencyList>
</plugin> </plugin>
<plugin name="CppTools" version="1.2.0" compatVersion="1.2.0"> <plugin name="CppTools" version="1.2.1" compatVersion="1.2.1">
<vendor>Nokia Corporation</vendor> <vendor>Nokia Corporation</vendor>
<copyright>(C) 2008-2009 Nokia Corporation</copyright> <copyright>(C) 2008-2009 Nokia Corporation</copyright>
<license> <license>
...@@ -19,8 +19,8 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license> ...@@ -19,8 +19,8 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license>
<description>Tools for analyzing C/C++ code.</description> <description>Tools for analyzing C/C++ code.</description>
<url>http://www.qtsoftware.com</url> <url>http://www.qtsoftware.com</url>
<dependencyList> <dependencyList>
<dependency name="TextEditor" version="1.2.0"/> <dependency name="TextEditor" version="1.2.1"/>
<dependency name="ProjectExplorer" version="1.2.0"/> <dependency name="ProjectExplorer" version="1.2.1"/>
<dependency name="QuickOpen" version="1.2.0"/> <dependency name="QuickOpen" version="1.2.1"/>
</dependencyList> </dependencyList>
</plugin> </plugin>
...@@ -932,7 +932,7 @@ bool CppCodeCompletion::completeMember(const QList<TypeOfExpression::Result> &re ...@@ -932,7 +932,7 @@ bool CppCodeCompletion::completeMember(const QList<TypeOfExpression::Result> &re
namedTy = ty->asNamedType(); namedTy = ty->asNamedType();
if (! namedTy) { if (! namedTy) {
Function *fun = ty->asFunctionType(); Function *fun = ty->asFunctionType();
if (fun && (fun->scope()->isBlockScope() || fun->scope()->isNamespaceScope())) if (fun && fun->scope() && (fun->scope()->isBlockScope() || fun->scope()->isNamespaceScope()))
namedTy = fun->returnType()->asNamedType(); namedTy = fun->returnType()->asNamedType();
} }
} }
......
<plugin name="Debugger" version="1.2.0" compatVersion="1.2.0"> <plugin name="Debugger" version="1.2.1" compatVersion="1.2.1">
<vendor>Nokia Corporation</vendor> <vendor>Nokia Corporation</vendor>
<copyright>(C) 2008-2009 Nokia Corporation</copyright> <copyright>(C) 2008-2009 Nokia Corporation</copyright>
<license> <license>
...@@ -19,10 +19,10 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license> ...@@ -19,10 +19,10 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license>
<description>Debugger integration.</description> <description>Debugger integration.</description>
<url>http://www.qtsoftware.com</url> <url>http://www.qtsoftware.com</url>
<dependencyList> <dependencyList>
<dependency name="CppEditor" version="1.2.0"/><!-- Debugger plugin adds items to the editor's context menu --> <dependency name="CppEditor" version="1.2.1"/><!-- Debugger plugin adds items to the editor's context menu -->
<dependency name="ProjectExplorer" version="1.2.0"/> <dependency name="ProjectExplorer" version="1.2.1"/>
<dependency name="Core" version="1.2.0"/> <dependency name="Core" version="1.2.1"/>
<dependency name="Find" version="1.2.0"/> <dependency name="Find" version="1.2.1"/>
</dependencyList> </dependencyList>
<argumentList> <argumentList>
<argument name="-disable-cdb">Disable Cdb debugger engine</argument> <argument name="-disable-cdb">Disable Cdb debugger engine</argument>
......
...@@ -281,8 +281,12 @@ void BreakHandler::removeAt(int index) ...@@ -281,8 +281,12 @@ void BreakHandler::removeAt(int index)
void BreakHandler::clear() void BreakHandler::clear()
{ {
for (int index = size(); --index >= 0; ) qDeleteAll(m_bp);
removeAt(index); m_bp.clear();
m_enabled.clear();
m_disabled.clear();
m_removed.clear();
m_inserted.clear();
} }
int BreakHandler::findBreakpoint(const BreakpointData &needle) int BreakHandler::findBreakpoint(const BreakpointData &needle)
...@@ -328,19 +332,19 @@ void BreakHandler::saveBreakpoints() ...@@ -328,19 +332,19 @@ void BreakHandler::saveBreakpoints()
const BreakpointData *data = at(index); const BreakpointData *data = at(index);
QMap<QString, QVariant> map; QMap<QString, QVariant> map;
if (!data->fileName.isEmpty()) if (!data->fileName.isEmpty())
map["filename"] = data->fileName; map.insert(QLatin1String("filename"), data->fileName);
if (!data->lineNumber.isEmpty()) if (!data->lineNumber.isEmpty())
map["linenumber"] = data->lineNumber; map.insert(QLatin1String("linenumber"), data->lineNumber);
if (!data->funcName.isEmpty()) if (!data->funcName.isEmpty())
map["funcname"] = data->funcName; map.insert(QLatin1String("funcname"), data->funcName);
if (!data->condition.isEmpty()) if (!data->condition.isEmpty())
map["condition"] = data->condition; map.insert(QLatin1String("condition"), data->condition);
if (!data->ignoreCount.isEmpty()) if (!data->ignoreCount.isEmpty())
map["ignorecount"] = data->ignoreCount; map.insert(QLatin1String("ignorecount"), data->ignoreCount);
if (!data->enabled) if (!data->enabled)
map["disabled"] = "1"; map.insert(QLatin1String("disabled"), QLatin1String("1"));
if (data->useFullPath) if (data->useFullPath)
map["usefullpath"] = "1"; map.insert(QLatin1String("usefullpath"), QLatin1String("1"));
list.append(map); list.append(map);
} }
setSessionValueRequested("Breakpoints", list); setSessionValueRequested("Breakpoints", list);
...@@ -351,18 +355,31 @@ void BreakHandler::loadBreakpoints() ...@@ -351,18 +355,31 @@ void BreakHandler::loadBreakpoints()
QVariant value; QVariant value;
sessionValueRequested("Breakpoints", &value); sessionValueRequested("Breakpoints", &value);
QList<QVariant> list = value.toList(); QList<QVariant> list = value.toList();
clear(); clear();
foreach (const QVariant &var, list) { foreach (const QVariant &var, list) {
const QMap<QString, QVariant> map = var.toMap(); const QMap<QString, QVariant> map = var.toMap();
BreakpointData *data = new BreakpointData(this); BreakpointData *data = new BreakpointData(this);
data->fileName = map["filename"].toString(); QVariant v = map.value(QLatin1String("filename"));
data->lineNumber = map["linenumber"].toString(); if (v.isValid())
data->condition = map["condition"].toString(); data->fileName = v.toString();
data->ignoreCount = map["ignorecount"].toString(); v = map.value(QLatin1String("linenumber"));
data->funcName = map["funcname"].toString(); if (v.isValid())
data->enabled = !map["disabled"].toInt(); data->lineNumber = v.toString();
data->useFullPath = bool(map["usefullpath"].toInt()); v = map.value(QLatin1String("condition"));
if (v.isValid())
data->condition = v.toString();
v = map.value(QLatin1String("ignorecount"));
if (v.isValid())
data->ignoreCount = v.toInt();
v = map.value(QLatin1String("funcname"));
if (v.isValid())
data->funcName = v.toString();
v = map.value(QLatin1String("disabled"));
if (v.isValid())
data->enabled = !v.toInt();
v = map.value(QLatin1String("usefullpath"));
if (v.isValid())
data->useFullPath = bool(v.toInt());
data->markerFileName = data->fileName; data->markerFileName = data->fileName;
data->markerLineNumber = data->lineNumber.toInt(); data->markerLineNumber = data->lineNumber.toInt();
append(data); append(data);
......
...@@ -407,12 +407,19 @@ static bool setBreakPointEnabledById(CIDebugControl *ctl, unsigned long id, bool ...@@ -407,12 +407,19 @@ static bool setBreakPointEnabledById(CIDebugControl *ctl, unsigned long id, bool
return true; return true;
} }
static inline QString msgCannotSetBreakAtFunction(const QString &func, const QString &why)
{
return QString::fromLatin1("Cannot set a breakpoint at '%1': %2").arg(func, why);
}
// Synchronize (halted) engine breakpoints with those of the BreakHandler. // Synchronize (halted) engine breakpoints with those of the BreakHandler.
bool CDBBreakPoint::synchronizeBreakPoints(CIDebugControl* debugControl, bool CDBBreakPoint::synchronizeBreakPoints(CIDebugControl* debugControl,
CIDebugSymbols *syms, CIDebugSymbols *syms,
BreakHandler *handler, BreakHandler *handler,
QString *errorMessage) QString *errorMessage, QStringList *warnings)
{ {
errorMessage->clear();
warnings->clear();
// Do an initial check whether we are in a state that allows // Do an initial check whether we are in a state that allows
// for modifying breakPoints // for modifying breakPoints
ULONG engineCount; ULONG engineCount;
...@@ -420,25 +427,29 @@ bool CDBBreakPoint::synchronizeBreakPoints(CIDebugControl* debugControl, ...@@ -420,25 +427,29 @@ bool CDBBreakPoint::synchronizeBreakPoints(CIDebugControl* debugControl,
*errorMessage = QString::fromLatin1("Cannot modify breakpoints: %1").arg(*errorMessage); *errorMessage = QString::fromLatin1("Cannot modify breakpoints: %1").arg(*errorMessage);
return false; return false;
} }
QString warning;
// Insert new ones // Insert new ones
bool updateMarkers = false; bool updateMarkers = false;
foreach (BreakpointData *nbd, handler->insertedBreakpoints()) { foreach (BreakpointData *nbd, handler->insertedBreakpoints()) {
warning.clear();
// Function breakpoints: Are the module names specified? // Function breakpoints: Are the module names specified?
bool breakPointOk = false; bool breakPointOk = false;
if (nbd->funcName.isEmpty()) { if (nbd->funcName.isEmpty()) {
breakPointOk = true; breakPointOk = true;
} else { } else {
switch (resolveSymbol(syms, &nbd->funcName, errorMessage)) { switch (resolveSymbol(syms, &nbd->funcName, &warning)) {
case ResolveSymbolOk: case ResolveSymbolOk:
breakPointOk = true; breakPointOk = true;
break; break;
case ResolveSymbolAmbiguous: case ResolveSymbolAmbiguous:
qWarning("Warning: %s\n", qPrintable(*errorMessage)); warnings->push_back(msgCannotSetBreakAtFunction(nbd->funcName, warning));
warning.clear();
breakPointOk = true; breakPointOk = true;
break; break;
case ResolveSymbolNotFound: case ResolveSymbolNotFound:
case ResolveSymbolError: case ResolveSymbolError:
qWarning("Warning: %s\n", qPrintable(*errorMessage)); warnings->push_back(msgCannotSetBreakAtFunction(nbd->funcName, warning));
warning.clear();
break; break;
}; };
} // function breakpoint } // function breakpoint
...@@ -447,7 +458,7 @@ bool CDBBreakPoint::synchronizeBreakPoints(CIDebugControl* debugControl, ...@@ -447,7 +458,7 @@ bool CDBBreakPoint::synchronizeBreakPoints(CIDebugControl* debugControl,
quint64 address; quint64 address;
unsigned long id; unsigned long id;
CDBBreakPoint ncdbbp(*nbd); CDBBreakPoint ncdbbp(*nbd);
breakPointOk = ncdbbp.add(debugControl, &address, &id, errorMessage); breakPointOk = ncdbbp.add(debugControl, &address, &id, &warning);
if (breakPointOk) { if (breakPointOk) {
if (debugBP) if (debugBP)
qDebug() << "Added " << id << " at " << address << ncdbbp; qDebug() << "Added " << id << " at " << address << ncdbbp;
...@@ -464,22 +475,21 @@ bool CDBBreakPoint::synchronizeBreakPoints(CIDebugControl* debugControl, ...@@ -464,22 +475,21 @@ bool CDBBreakPoint::synchronizeBreakPoints(CIDebugControl* debugControl,
nbd->bpFuncName = nbd->funcName; nbd->bpFuncName = nbd->funcName;
} }
} // had symbol } // had symbol
if (!breakPointOk) if (!breakPointOk && !warning.isEmpty())
qWarning("%s\n", qPrintable(*errorMessage)); warnings->push_back(warning); }
}
// Delete // Delete
foreach (BreakpointData *rbd, handler->takeRemovedBreakpoints()) { foreach (BreakpointData *rbd, handler->takeRemovedBreakpoints()) {
if (!removeBreakPointById(debugControl, rbd->bpNumber.toUInt(), errorMessage)) if (!removeBreakPointById(debugControl, rbd->bpNumber.toUInt(), &warning))
qWarning("%s\n", qPrintable(*errorMessage)); warnings->push_back(warning);
delete rbd; delete rbd;
} }
// Enable/Disable // Enable/Disable
foreach (BreakpointData *ebd, handler->takeEnabledBreakpoints()) foreach (BreakpointData *ebd, handler->takeEnabledBreakpoints())
if (!setBreakPointEnabledById(debugControl, ebd->bpNumber.toUInt(), true, errorMessage)) if (!setBreakPointEnabledById(debugControl, ebd->bpNumber.toUInt(), true, &warning))
qWarning("%s\n", qPrintable(*errorMessage)); warnings->push_back(warning);
foreach (BreakpointData *dbd, handler->takeDisabledBreakpoints()) foreach (BreakpointData *dbd, handler->takeDisabledBreakpoints())
if (!setBreakPointEnabledById(debugControl, dbd->bpNumber.toUInt(), false, errorMessage)) if (!setBreakPointEnabledById(debugControl, dbd->bpNumber.toUInt(), false, &warning))
qWarning("%s\n", qPrintable(*errorMessage)); warnings->push_back(warning);
if (updateMarkers) if (updateMarkers)
handler->updateMarkers(); handler->updateMarkers();
......
...@@ -73,7 +73,8 @@ struct CDBBreakPoint ...@@ -73,7 +73,8 @@ struct CDBBreakPoint
static bool getBreakPoints(CIDebugControl* debugControl, QList<CDBBreakPoint> *bps, QString *errorMessage); static bool getBreakPoints(CIDebugControl* debugControl, QList<CDBBreakPoint> *bps, QString *errorMessage);
// Synchronize (halted) engine with BreakHandler. // Synchronize (halted) engine with BreakHandler.
static bool synchronizeBreakPoints(CIDebugControl* ctl, CIDebugSymbols *syms, static bool synchronizeBreakPoints(CIDebugControl* ctl, CIDebugSymbols *syms,
BreakHandler *bh, QString *errorMessage); BreakHandler *bh,
QString *errorMessage, QStringList *warnings);
// Return a 'canonical' file (using '/' and capitalized drive letter) // Return a 'canonical' file (using '/' and capitalized drive letter)
static QString canonicalSourceFile(const QString &f); static QString canonicalSourceFile(const QString &f);
......
...@@ -528,6 +528,10 @@ void CdbDebugEnginePrivate::clearDisplay() ...@@ -528,6 +528,10 @@ void CdbDebugEnginePrivate::clearDisplay()
bool CdbDebugEngine::startDebugger(const QSharedPointer<DebuggerStartParameters> &sp) bool CdbDebugEngine::startDebugger(const QSharedPointer<DebuggerStartParameters> &sp)
{ {
if (m_d->m_hDebuggeeProcess) {
warning(QLatin1String("Internal error: Attempt to start debugger while another process is being debugged."));
return false;
}
m_d->clearDisplay(); m_d->clearDisplay();
const DebuggerStartMode mode = m_d->m_debuggerManager->startMode(); const DebuggerStartMode mode = m_d->m_debuggerManager->startMode();
...@@ -1268,6 +1272,8 @@ void CdbDebugEngine::selectThread(int index) ...@@ -1268,6 +1272,8 @@ void CdbDebugEngine::selectThread(int index)
void CdbDebugEngine::attemptBreakpointSynchronization() void CdbDebugEngine::attemptBreakpointSynchronization()
{ {
if (!m_d->m_hDebuggeeProcess) // Sometimes called from the breakpoint Window
return;
QString errorMessage; QString errorMessage;
if (!m_d->attemptBreakpointSynchronization(&errorMessage)) if (!m_d->attemptBreakpointSynchronization(&errorMessage))
warning(msgFunctionFailed(Q_FUNC_INFO, errorMessage)); warning(msgFunctionFailed(Q_FUNC_INFO, errorMessage));
...@@ -1301,10 +1307,15 @@ bool CdbDebugEnginePrivate::attemptBreakpointSynchronization(QString *errorMessa ...@@ -1301,10 +1307,15 @@ bool CdbDebugEnginePrivate::attemptBreakpointSynchronization(QString *errorMessa
return true; return true;
} }
return CDBBreakPoint::synchronizeBreakPoints(m_cif.debugControl, QStringList warnings;
const bool ok = CDBBreakPoint::synchronizeBreakPoints(m_cif.debugControl,
m_cif.debugSymbols, m_cif.debugSymbols,
m_debuggerManagerAccess->breakHandler(), m_debuggerManagerAccess->breakHandler(),
errorMessage); errorMessage, &warnings);
if (const int warningsCount = warnings.size())
for (int w = 0; w < warningsCount; w++)
m_engine->warning(warnings.at(w));
return ok;
} }
void CdbDebugEngine::reloadDisassembler() void CdbDebugEngine::reloadDisassembler()
......
...@@ -138,6 +138,7 @@ static ResolveSymbolResult resolveSymbol(CIDebugSymbols *syms, QString *symbol, ...@@ -138,6 +138,7 @@ static ResolveSymbolResult resolveSymbol(CIDebugSymbols *syms, QString *symbol,
QStringList *matches, QStringList *matches,
QString *errorMessage) QString *errorMessage)
{ {
errorMessage->clear();
// Is it an incomplete symbol? // Is it an incomplete symbol?
if (symbol->contains(QLatin1Char('!'))) if (symbol->contains(QLatin1Char('!')))
return ResolveSymbolOk; return ResolveSymbolOk;
......
...@@ -64,7 +64,10 @@ DebuggerSettings::~DebuggerSettings() ...@@ -64,7 +64,10 @@ DebuggerSettings::~DebuggerSettings()
void DebuggerSettings::insertItem(int code, SavedAction *item) void DebuggerSettings::insertItem(int code, SavedAction *item)
{ {
QTC_ASSERT(!m_items.contains(code), qDebug() << code << item->toString(); return); 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; m_items[code] = item;
} }
...@@ -90,9 +93,13 @@ QString DebuggerSettings::dump() const ...@@ -90,9 +93,13 @@ QString DebuggerSettings::dump() const
{ {
QString out; QString out;
QTextStream ts(&out); QTextStream ts(&out);
ts << "Debugger settings: "; ts << "Debugger settings: ";
foreach (SavedAction *item, m_items) foreach (SavedAction *item, m_items) {
ts << '\n' << item->value().toString(); QString key = item->settingsKey();
if (!key.isEmpty())
ts << '\n' << key << ": " << item->value().toString()
<< " (default: " << item->defaultValue().toString() << ")";
}
return out; return out;
} }
...@@ -171,18 +178,22 @@ DebuggerSettings *DebuggerSettings::instance() ...@@ -171,18 +178,22 @@ DebuggerSettings *DebuggerSettings::instance()
instance->insertItem(UseDebuggingHelpers, item); instance->insertItem(UseDebuggingHelpers, item);
item = new SavedAction(instance); item = new SavedAction(instance);
item->setSettingsKey(debugModeGroup, QLatin1String("CustomDebuggingHelperLocation")); item->setSettingsKey(debugModeGroup, QLatin1String("UseCustomDebuggingHelperLocation"));
instance->insertItem(UseCustomDebuggingHelperLocation, item);
item->setCheckable(true); item->setCheckable(true);
item->setDefaultValue(false);
instance->insertItem(UseCustomDebuggingHelperLocation, item);
item = new SavedAction(instance); item = new SavedAction(instance);
item->setSettingsKey(debugModeGroup, QLatin1String("CustomDebuggingHelperLocation")); item->setSettingsKey(debugModeGroup, QLatin1String("CustomDebuggingHelperLocation"));
item->setCheckable(true);
item->setDefaultValue(QString());
instance->insertItem(CustomDebuggingHelperLocation, item); instance->insertItem(CustomDebuggingHelperLocation, item);
item = new SavedAction(instance); item = new SavedAction(instance);
item->setSettingsKey(debugModeGroup, QLatin1String("DebugDebuggingHelpers")); item->setSettingsKey(debugModeGroup, QLatin1String("DebugDebuggingHelpers"));
item->setText(tr("Debug debugging helper")); item->setText(tr("Debug debugging helper"));
item->setCheckable(true); item->setCheckable(true);
item->setDefaultValue(false);
instance->insertItem(DebugDebuggingHelpers, item); instance->insertItem(DebugDebuggingHelpers, item);
...@@ -210,6 +221,7 @@ DebuggerSettings *DebuggerSettings::instance() ...@@ -210,6 +221,7 @@ DebuggerSettings *DebuggerSettings::instance()
item->setCheckable(true); item->setCheckable(true);
item->setSettingsKey(debugModeGroup, QLatin1String("FormatHexadecimal")); item->setSettingsKey(debugModeGroup, QLatin1String("FormatHexadecimal"));
item->setChecked(true); item->setChecked(true);
item->setDefaultValue(false);
item->setData(FormatHexadecimal); item->setData(FormatHexadecimal);
instance->insertItem(FormatHexadecimal, item); instance->insertItem(FormatHexadecimal, item);
instance->m_registerFormatGroup->addAction(item); instance->m_registerFormatGroup->addAction(item);
...@@ -218,6 +230,7 @@ DebuggerSettings *DebuggerSettings::instance() ...@@ -218,6 +230,7 @@ DebuggerSettings *DebuggerSettings::instance()
item->setText(tr("Decimal")); item->setText(tr("Decimal"));
item->setCheckable(true); item->setCheckable(true);
item->setSettingsKey(debugModeGroup, QLatin1String("FormatDecimal")); item->setSettingsKey(debugModeGroup, QLatin1String("FormatDecimal"));
item->setDefaultValue(false);
item->setData(FormatDecimal); item->setData(FormatDecimal);
instance->insertItem(FormatDecimal, item); instance->insertItem(FormatDecimal, item);
instance->m_registerFormatGroup->addAction(item); instance->m_registerFormatGroup->addAction(item);
...@@ -226,6 +239,7 @@ DebuggerSettings *DebuggerSettings::instance() ...@@ -226,6 +239,7 @@ DebuggerSettings *DebuggerSettings::instance()
item->setText(tr("Octal"));