Hin und wieder bekomme ich eine Bestätigung in QVector::operator
[]. Ich kann diese Behauptung nicht brechen.Breaking on Assertions mit CDB in Qt Creator
Ich habe alle Vorschläge in this Antwort versucht, und sie entweder nicht funktionieren, oder sind nicht das, was ich bin nach:
Sie einen Handler für die Meldungen/Warnungen installieren können, Qt emittiert und verarbeitet sie selbst.
Ich würde es nicht jedes Mal tun müssen, wenn es passiert.
in qt Schöpfer zu Tools gehen -> Optionen -> Debugger -> GDB und wählen Sie "Stopp, wenn ein qFatal ausgegeben wird"
Diese Option ist nicht für CDB existiert.
Ich habe eine BreakInDebugger-Funktion von Hand und ein Assert-Makro, das die Funktion aufruft, codiert.
Ich möchte Qt-Code nicht berühren müssen. Außerdem kann ich auch nur qvector.h
bearbeiten und eine Zeile hinzufügen, die ich tatsächlich auf brechen:
if (i >= 0 && i < d->size)
qDebug() << "oops";
Ist dies nur möglich, Creator?
Update: Es scheint zu im Zusammenhang zu stehen, wo die Behauptung ausgelöst wird. Ein Beispiel, wie das funktioniert:
#include <QGuiApplication>
#include <QtQuick>
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QVector<int> i;
i[0] = 0;
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
}
Das heißt, ich den typischen Fehlerdialog mit den Optionen erhalten die Behauptung debuggen:
---------------------------
Microsoft Visual C++ Runtime Library
---------------------------
Debug Error!
Program: C:\dev\qt5-dev-debug\qtbase\lib\Qt5Cored.dll
Module: 5.8.0
File: C:\dev\qt5-dev\qtbase\src\corelib\global\qglobal.cpp
Line: 3045
ASSERT failure in QVector<T>::operator[]: "index out of range", file c:\dev\qt5-dev-debug\qtbase\include\qtcore\../../../../qt5-dev/qtbase/src/corelib/tools/qvector.h, line 433
(Press Retry to debug the application)
---------------------------
Abort Retry Ignore
---------------------------
jedoch mit einem Unit-Test-Projekt, ich bekomme nicht Dialog:
#include <QString>
#include <QtTest>
class Untitled3Test : public QObject
{
Q_OBJECT
public:
Untitled3Test();
private Q_SLOTS:
void testCase1();
};
Untitled3Test::Untitled3Test()
{
}
void Untitled3Test::testCase1()
{
QVector<int> i;
i[0] = 0;
}
QTEST_APPLESS_MAIN(Untitled3Test)
#include "tst_untitled3test.moc"
Die andere Frage war für mingw32 + gdb, die Vorschläge dort werden sicher nicht für cdb funktionieren. –
Ja, ich weiß, ich wollte nur klarstellen, dass das kein Duplikat ist. – Mitch
Ich habe https://bugreports.qt.io/browse/QTCREATORBUG-16603 erstellt. – Mitch