forked from qt-creator/qt-creator
Debugger: Don't register identical debuggers (unless forced)
User code can decide whether it wants something added unconditionally (by creating a DebuggerItem with valid id), or let the manager re-use something matching or create an id. Task-number: QTCREATORBUG-10641 Change-Id: I4f5a1fbe881932ba5608f5c6116b4ea8352f8903 Reviewed-by: Daniel Teske <daniel.teske@digia.com> Reviewed-by: hjk <hjk121@nokiamail.com>
This commit is contained in:
@@ -180,6 +180,7 @@ void DebuggerItemManager::autoDetectCdbDebuggers()
|
||||
if (findByCommand(cdb))
|
||||
continue;
|
||||
DebuggerItem item;
|
||||
item.createId();
|
||||
item.setAutoDetected(true);
|
||||
item.setAbis(Abi::abisOfBinary(cdb));
|
||||
item.setCommand(cdb);
|
||||
@@ -245,6 +246,7 @@ void DebuggerItemManager::autoDetectGdbOrLldbDebuggers()
|
||||
if (findByCommand(command))
|
||||
continue;
|
||||
DebuggerItem item;
|
||||
item.createId();
|
||||
item.setCommand(command);
|
||||
item.reinitializeFromFile();
|
||||
//: %1: Debugger engine type (GDB, LLDB, CDB...), %2: Path
|
||||
@@ -290,6 +292,7 @@ void DebuggerItemManager::readLegacyDebuggers(const FileName &file)
|
||||
if (findByCommand(command))
|
||||
continue;
|
||||
DebuggerItem item;
|
||||
item.createId();
|
||||
item.setCommand(command);
|
||||
item.setAutoDetected(true);
|
||||
item.reinitializeFromFile();
|
||||
@@ -365,9 +368,24 @@ void DebuggerItemManager::saveDebuggers()
|
||||
|
||||
QVariant DebuggerItemManager::registerDebugger(const DebuggerItem &item)
|
||||
{
|
||||
QTC_ASSERT(!findById(item.id()), return item.id());
|
||||
// Force addition when Id is set.
|
||||
if (item.id().isValid())
|
||||
return addDebugger(item);
|
||||
|
||||
return addDebugger(item);
|
||||
// Otherwise, try re-using existing item first.
|
||||
foreach (const DebuggerItem &d, m_debuggers) {
|
||||
if (d.command() == item.command()
|
||||
&& d.isAutoDetected() == item.isAutoDetected()
|
||||
&& d.engineType() == item.engineType()
|
||||
&& d.displayName() == item.displayName()
|
||||
&& d.abis() == item.abis())
|
||||
return d.id();
|
||||
}
|
||||
|
||||
// Nothing suitable. Create a new id and add the item.
|
||||
DebuggerItem di = item;
|
||||
di.createId();
|
||||
return addDebugger(di);
|
||||
}
|
||||
|
||||
void DebuggerItemManager::deregisterDebugger(const QVariant &id)
|
||||
|
||||
Reference in New Issue
Block a user