void LldbEngine::updateBreakpointData(const GdbMi &bkpt, bool added) { BreakHandler *handler = breakHandler(); BreakpointResponseId rid = BreakpointResponseId(bkpt["lldbid"].data()); BreakpointModelId id = BreakpointModelId(bkpt["modelid"].data()); Breakpoint bp = handler->breakpointById(id); if (!bp.isValid()) bp = handler->findBreakpointByResponseId(rid); BreakpointResponse response = bp.response(); if (added) response.id = rid; QTC_CHECK(response.id == rid); response.address = 0; response.enabled = bkpt["enabled"].toInt(); response.ignoreCount = bkpt["ignorecount"].toInt(); response.condition = QByteArray::fromHex(bkpt["condition"].data()); response.hitCount = bkpt["hitcount"].toInt(); response.fileName = bkpt["file"].toUtf8(); response.lineNumber = bkpt["line"].toInt(); GdbMi locations = bkpt["locations"]; const int numChild = int(locations.children().size()); if (numChild > 1) { foreach (const GdbMi &location, locations.children()) { const int locid = location["locid"].toInt(); BreakpointResponse sub; sub.id = BreakpointResponseId(rid.majorPart(), locid); sub.type = response.type; sub.address = location["addr"].toAddress(); sub.functionName = location["func"].toUtf8(); sub.fileName = location["file"].toUtf8(); sub.lineNumber = location["line"].toInt(); bp.insertSubBreakpoint(sub); } } else if (numChild == 1) {
void PdbEngine::handleBreakInsert(const PdbResponse &response) { //qDebug() << "BP RESPONSE: " << response.data; // "Breakpoint 1 at /pdb/math.py:10" BreakpointId id(response.cookie.toInt()); BreakHandler *handler = breakHandler(); QTC_ASSERT(response.data.startsWith("Breakpoint "), return); int pos1 = response.data.indexOf(" at "); QTC_ASSERT(pos1 != -1, return); QByteArray bpnr = response.data.mid(11, pos1 - 11); int pos2 = response.data.lastIndexOf(":"); QByteArray file = response.data.mid(pos1 + 4, pos2 - pos1 - 4); QByteArray line = response.data.mid(pos2 + 1); BreakpointResponse br; br.number = bpnr.toInt(); br.fileName = _(file); br.lineNumber = line.toInt(); handler->setResponse(id, br); }
void PdbEngine::insertBreakpoint(BreakpointModelId id) { BreakHandler *handler = breakHandler(); QTC_CHECK(handler->state(id) == BreakpointInsertRequested); handler->notifyBreakpointInsertProceeding(id); QByteArray loc; if (handler->type(id) == BreakpointByFunction) loc = handler->functionName(id).toLatin1(); else loc = handler->fileName(id).toLocal8Bit() + ':' + QByteArray::number(handler->lineNumber(id)); postCommand("break " + loc, CB(handleBreakInsert), QVariant(id)); }
void PdbEngine::removeBreakpoint(BreakpointModelId id) { BreakHandler *handler = breakHandler(); QTC_CHECK(handler->state(id) == BreakpointRemoveRequested); handler->notifyBreakpointRemoveProceeding(id); BreakpointResponse br = handler->response(id); showMessage(_("DELETING BP %1 IN %2").arg(br.id.toString()) .arg(handler->fileName(id))); postCommand("clear " + br.id.toByteArray()); // Pretend it succeeds without waiting for response. handler->notifyBreakpointRemoveOk(id); }
void PdbEngine::removeBreakpoint(BreakpointId id) { BreakHandler *handler = breakHandler(); QTC_ASSERT(handler->state(id) == BreakpointRemoveRequested, /**/); handler->notifyBreakpointRemoveProceeding(id); BreakpointResponse br = handler->response(id); showMessage(_("DELETING BP %1 IN %2").arg(br.number) .arg(handler->fileName(id))); postCommand("clear " + QByteArray::number(br.number)); // Pretend it succeeds without waiting for response. handler->notifyBreakpointRemoveOk(id); }