v = map.value(_("message"));
if (v.isValid())
data.message = v.toString();
- appendBreakpoint(data);
+ if (data.isValid()) {
+ appendBreakpoint(data);
+ } else {
+ qWarning("Not restoring invalid breakpoint: %s", qPrintable(data.toString()));
+ }
}
//qDebug() << "LOADED BREAKPOINTS" << this << list.size();
}
void BreakHandler::appendBreakpoint(const BreakpointParameters &data)
{
- QTC_ASSERT(data.type != UnknownType, return);
+ if (!data.isValid()) {
+ qWarning("Not adding invalid breakpoint: %s", qPrintable(data.toString()));
+ return;
+ }
+
BreakpointModelId id(++currentId);
const int row = m_storage.size();
beginInsertRows(QModelIndex(), row, row);
return parts;
}
+bool BreakpointParameters::isValid() const
+{
+ switch (type) {
+ case Debugger::Internal::BreakpointByFileAndLine:
+ return !fileName.isEmpty() && lineNumber > 0;
+ case Debugger::Internal::BreakpointByFunction:
+ return !functionName.isEmpty();
+ case Debugger::Internal::WatchpointAtAddress:
+ case Debugger::Internal::BreakpointByAddress:
+ return address != 0;
+ case Debugger::Internal::BreakpointAtThrow:
+ case Debugger::Internal::BreakpointAtCatch:
+ case Debugger::Internal::BreakpointAtMain:
+ case Debugger::Internal::BreakpointAtFork:
+ case Debugger::Internal::BreakpointAtExec:
+ case Debugger::Internal::BreakpointAtSysCall:
+ case Debugger::Internal::BreakpointOnQmlSignalHandler:
+ case Debugger::Internal::BreakpointAtJavaScriptThrow:
+ break;
+ case Debugger::Internal::WatchpointAtExpression:
+ return !expression.isEmpty();
+ case Debugger::Internal::UnknownType:
+ return false;
+ }
+ return true;
+}
+
bool BreakpointParameters::equals(const BreakpointParameters &rhs) const
{
return !differencesTo(rhs);
public:
explicit BreakpointParameters(BreakpointType = UnknownType);
BreakpointParts differencesTo(const BreakpointParameters &rhs) const;
+ bool isValid() const;
bool equals(const BreakpointParameters &rhs) const;
bool conditionsMatch(const QByteArray &other) const;
bool isWatchpoint() const