From 08e27a5542cec96e5bf19d38b045ea0b01bdc17e Mon Sep 17 00:00:00 2001 From: David Schulz Date: Mon, 22 Oct 2018 13:06:05 +0200 Subject: [PATCH] Debugger: Do not use deprecated bp model id to construct response ids fixes breakpoint deletion Change-Id: Ie5bda4e2664338ad4210f275abca374c6918753c Reviewed-by: Christian Stenger --- src/plugins/debugger/cdb/cdbengine.cpp | 4 ++-- src/plugins/debugger/cdb/cdbparsehelpers.cpp | 23 +++++--------------- src/plugins/debugger/cdb/cdbparsehelpers.h | 2 +- 3 files changed, 9 insertions(+), 20 deletions(-) diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp index d8b99bc934b..6288d493fba 100644 --- a/src/plugins/debugger/cdb/cdbengine.cpp +++ b/src/plugins/debugger/cdb/cdbengine.cpp @@ -2492,7 +2492,7 @@ void CdbEngine::insertBreakpoint(const Breakpoint &bp) BreakpointParameters parameters = bp->requestedParameters(); const auto handleBreakInsertCB = [this, bp](const DebuggerResponse &r) { handleBreakInsert(r, bp); }; BreakpointParameters response = parameters; - auto responseId = QString::number(breakPointIdToCdbId(bp)); + const QString responseId = breakPointCdbId(bp); QScopedPointer lineCorrection( new BreakpointCorrectionContext(m_codeModelSnapshot, CppTools::CppModelManager::instance()->workingCopy())); if (!m_autoBreakPointCorrection @@ -2539,7 +2539,7 @@ void CdbEngine::updateBreakpoint(const Breakpoint &bp) BreakpointParameters parameters = bp->requestedParameters(); const auto handleBreakInsertCB = [this, bp](const DebuggerResponse &r) { handleBreakInsert(r, bp); }; BreakpointParameters response = parameters; - auto responseId = QString::number(breakPointIdToCdbId(bp)); + const QString responseId = breakPointCdbId(bp); notifyBreakpointChangeProceeding(bp); if (debugBreakpoints) qDebug("Changing %d:\n %s\nTo %s\n", bp->modelId(), diff --git a/src/plugins/debugger/cdb/cdbparsehelpers.cpp b/src/plugins/debugger/cdb/cdbparsehelpers.cpp index 415d9c2de7e..83442235d90 100644 --- a/src/plugins/debugger/cdb/cdbparsehelpers.cpp +++ b/src/plugins/debugger/cdb/cdbparsehelpers.cpp @@ -128,25 +128,14 @@ static BreakpointParameters fixWinMSVCBreakpoint(const BreakpointParameters &p) return p; } -int breakPointIdToCdbId(const Breakpoint &bp) +QString breakPointCdbId(const Breakpoint &bp) { -// return cdbBreakPointStartId + bp.majorPart() * cdbBreakPointIdMinorPart + bp.minorPart(); + static int bpId = 1; if (!bp->responseId().isEmpty()) - return bp->responseId().toInt(); - return cdbBreakPointStartId + bp->modelId() * cdbBreakPointIdMinorPart; + return bp->responseId(); + return QString::number(cdbBreakPointStartId + (bpId++) * cdbBreakPointIdMinorPart); } -//static int cdbIdToBreakpointModel(int cdbid) -//{ -// if (cdbid >= cdbBreakPointStartId) { -// int major = (cdbid - cdbBreakPointStartId) / cdbBreakPointIdMinorPart; -// int minor = cdbid % cdbBreakPointIdMinorPart; -// (void) minor; -// return major; -// } -// return 0; -//} - QString cdbAddBreakpointCommand(const BreakpointParameters &bpIn, const QList > &sourcePathMapping, const QString &responseId, @@ -212,11 +201,11 @@ QString cdbAddBreakpointCommand(const BreakpointParameters &bpIn, QString cdbClearBreakpointCommand(const Breakpoint &bp) { // FIME: Check -// const int firstBreakPoint = breakPointIdToCdbId(id); +// const int firstBreakPoint = breakPointCdbId(id); // if (id.isMinor()) // return "bc " + QString::number(firstBreakPoint); // If this is a major break point we also want to delete all sub break points - const int firstBreakPoint = cdbBreakPointStartId + bp->modelId() * cdbBreakPointIdMinorPart; + const int firstBreakPoint = bp->responseId().toInt(); const int lastBreakPoint = firstBreakPoint + cdbBreakPointIdMinorPart - 1; return "bc " + QString::number(firstBreakPoint) + '-' + QString::number(lastBreakPoint); } diff --git a/src/plugins/debugger/cdb/cdbparsehelpers.h b/src/plugins/debugger/cdb/cdbparsehelpers.h index 73b480b69e3..6bf0efa160b 100644 --- a/src/plugins/debugger/cdb/cdbparsehelpers.h +++ b/src/plugins/debugger/cdb/cdbparsehelpers.h @@ -53,7 +53,7 @@ QString cdbSourcePathMapping(QString fileName, enum { cdbBreakPointStartId = 100000, cdbBreakPointIdMinorPart = 100}; -int breakPointIdToCdbId(const Breakpoint &bp); +QString breakPointCdbId(const Breakpoint &bp); // Convert breakpoint in CDB syntax (applying source path mappings using native paths). QString cdbAddBreakpointCommand(const BreakpointParameters &d,