Debugger: Make tracepoints a capability.

This commit is contained in:
Friedemann Kleint
2011-02-21 13:19:42 +01:00
parent d866848ab8
commit 43c980e6a3
3 changed files with 37 additions and 23 deletions

View File

@@ -89,8 +89,9 @@ private:
ThreadSpecPart = 0x20, ThreadSpecPart = 0x20,
AllConditionParts = ConditionPart|IgnoreCountPart|ThreadSpecPart, AllConditionParts = ConditionPart|IgnoreCountPart|ThreadSpecPart,
ModulePart = 0x40, ModulePart = 0x40,
TracePointPart = 0x80,
AllParts = FileAndLinePart|FunctionPart|AddressPart|ConditionPart AllParts = FileAndLinePart|FunctionPart|AddressPart|ConditionPart
|IgnoreCountPart|ThreadSpecPart|ModulePart |IgnoreCountPart|ThreadSpecPart|ModulePart|TracePointPart
}; };
void setPartsEnabled(unsigned partsMask); void setPartsEnabled(unsigned partsMask);
@@ -116,7 +117,8 @@ BreakpointDialog::BreakpointDialog(unsigned engineCapabilities, QWidget *parent)
m_enabledParts &= ~ConditionPart; m_enabledParts &= ~ConditionPart;
if (!(engineCapabilities & BreakModuleCapability)) if (!(engineCapabilities & BreakModuleCapability))
m_enabledParts &= ~ModulePart; m_enabledParts &= ~ModulePart;
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); if (!(engineCapabilities & TracePointCapability))
m_enabledParts &= ~TracePointPart;
// Match BreakpointType (omitting unknown type). // Match BreakpointType (omitting unknown type).
m_ui.setupUi(this); m_ui.setupUi(this);
QStringList types; QStringList types;
@@ -208,6 +210,9 @@ void BreakpointDialog::setPartsEnabled(unsigned partsMask)
m_ui.labelModule->setEnabled(partsMask & ModulePart); m_ui.labelModule->setEnabled(partsMask & ModulePart);
m_ui.lineEditModule->setEnabled(partsMask & ModulePart); m_ui.lineEditModule->setEnabled(partsMask & ModulePart);
m_ui.labelTracepoint->setEnabled(partsMask & TracePointPart);
m_ui.checkBoxTracepoint->setEnabled(partsMask & TracePointPart);
} }
void BreakpointDialog::clearOtherParts(unsigned partsMask) void BreakpointDialog::clearOtherParts(unsigned partsMask)
@@ -233,12 +238,14 @@ void BreakpointDialog::clearOtherParts(unsigned partsMask)
m_ui.lineEditThreadSpec->clear(); m_ui.lineEditThreadSpec->clear();
if (invertedPartsMask & ModulePart) if (invertedPartsMask & ModulePart)
m_ui.lineEditModule->clear(); m_ui.lineEditModule->clear();
if (invertedPartsMask & TracePointPart)
m_ui.checkBoxTracepoint->setChecked(false);
} }
void BreakpointDialog::getParts(unsigned partsMask, BreakpointParameters *data) const void BreakpointDialog::getParts(unsigned partsMask, BreakpointParameters *data) const
{ {
data->enabled = m_ui.checkBoxEnabled->isChecked(); data->enabled = m_ui.checkBoxEnabled->isChecked();
data->tracepoint = m_ui.checkBoxTracepoint->isChecked();
data->command = m_ui.lineEditCommand->text().trimmed(); data->command = m_ui.lineEditCommand->text().trimmed();
if (partsMask & FileAndLinePart) { if (partsMask & FileAndLinePart) {
@@ -261,6 +268,9 @@ void BreakpointDialog::getParts(unsigned partsMask, BreakpointParameters *data)
BreakHandler::threadSpecFromDisplay(m_ui.lineEditThreadSpec->text()); BreakHandler::threadSpecFromDisplay(m_ui.lineEditThreadSpec->text());
if (partsMask & ModulePart) if (partsMask & ModulePart)
data->module = m_ui.lineEditModule->text(); data->module = m_ui.lineEditModule->text();
if (partsMask & TracePointPart)
data->tracepoint = m_ui.checkBoxTracepoint->isChecked();
} }
void BreakpointDialog::setParts(unsigned mask, const BreakpointParameters &data) void BreakpointDialog::setParts(unsigned mask, const BreakpointParameters &data)
@@ -272,7 +282,6 @@ void BreakpointDialog::setParts(unsigned mask, const BreakpointParameters &data)
if (mask & FileAndLinePart) { if (mask & FileAndLinePart) {
m_ui.pathChooserFileName->setPath(data.fileName); m_ui.pathChooserFileName->setPath(data.fileName);
m_ui.lineEditLineNumber->setText(QString::number(data.lineNumber)); m_ui.lineEditLineNumber->setText(QString::number(data.lineNumber));
m_ui.checkBoxTracepoint->setChecked(data.tracepoint);
} }
if (mask & FunctionPart) if (mask & FunctionPart)
@@ -296,6 +305,9 @@ void BreakpointDialog::setParts(unsigned mask, const BreakpointParameters &data)
setText(BreakHandler::displayFromThreadSpec(data.threadSpec)); setText(BreakHandler::displayFromThreadSpec(data.threadSpec));
if (mask & ModulePart) if (mask & ModulePart)
m_ui.lineEditModule->setText(data.module); m_ui.lineEditModule->setText(data.module);
if (mask & TracePointPart)
m_ui.checkBoxTracepoint->setChecked(data.tracepoint);
} }
void BreakpointDialog::typeChanged(int) void BreakpointDialog::typeChanged(int)
@@ -308,10 +320,10 @@ void BreakpointDialog::typeChanged(int)
case UnknownType: case UnknownType:
break; break;
case BreakpointByFileAndLine: case BreakpointByFileAndLine:
getParts(FileAndLinePart|ModulePart|AllConditionParts, &m_savedParameters); getParts(FileAndLinePart|ModulePart|AllConditionParts|TracePointPart, &m_savedParameters);
break; break;
case BreakpointByFunction: case BreakpointByFunction:
getParts(FunctionPart|ModulePart|AllConditionParts, &m_savedParameters); getParts(FunctionPart|ModulePart|AllConditionParts|TracePointPart, &m_savedParameters);
break; break;
case BreakpointAtThrow: case BreakpointAtThrow:
case BreakpointAtCatch: case BreakpointAtCatch:
@@ -319,7 +331,7 @@ void BreakpointDialog::typeChanged(int)
break; break;
case BreakpointByAddress: case BreakpointByAddress:
case Watchpoint: case Watchpoint:
getParts(AddressPart|AllConditionParts, &m_savedParameters); getParts(AddressPart|AllConditionParts|TracePointPart, &m_savedParameters);
break; break;
} }
@@ -328,19 +340,19 @@ void BreakpointDialog::typeChanged(int)
case UnknownType: case UnknownType:
break; break;
case BreakpointByFileAndLine: case BreakpointByFileAndLine:
setParts(FileAndLinePart|AllConditionParts|ModulePart, m_savedParameters); setParts(FileAndLinePart|AllConditionParts|ModulePart|TracePointPart, m_savedParameters);
setPartsEnabled(FileAndLinePart|AllConditionParts|ModulePart); setPartsEnabled(FileAndLinePart|AllConditionParts|ModulePart|TracePointPart);
clearOtherParts(FileAndLinePart|AllConditionParts|ModulePart); clearOtherParts(FileAndLinePart|AllConditionParts|ModulePart|TracePointPart);
break; break;
case BreakpointByFunction: case BreakpointByFunction:
setParts(FunctionPart|AllConditionParts|ModulePart, m_savedParameters); setParts(FunctionPart|AllConditionParts|ModulePart|TracePointPart, m_savedParameters);
setPartsEnabled(FunctionPart|AllConditionParts|ModulePart); setPartsEnabled(FunctionPart|AllConditionParts|ModulePart|TracePointPart);
clearOtherParts(FunctionPart|AllConditionParts|ModulePart); clearOtherParts(FunctionPart|AllConditionParts|ModulePart|TracePointPart);
break; break;
case BreakpointAtThrow: case BreakpointAtThrow:
case BreakpointAtCatch: case BreakpointAtCatch:
clearOtherParts(AllConditionParts|ModulePart); clearOtherParts(AllConditionParts|ModulePart|TracePointPart);
setPartsEnabled(AllConditionParts); setPartsEnabled(AllConditionParts|TracePointPart);
break; break;
case BreakpointAtMain: case BreakpointAtMain:
m_ui.lineEditFunction->setText(QLatin1String("main")); // Just for display m_ui.lineEditFunction->setText(QLatin1String("main")); // Just for display
@@ -349,9 +361,9 @@ void BreakpointDialog::typeChanged(int)
break; break;
case BreakpointByAddress: case BreakpointByAddress:
case Watchpoint: case Watchpoint:
setParts(AddressPart|AllConditionParts, m_savedParameters); setParts(AddressPart|AllConditionParts|TracePointPart, m_savedParameters);
setPartsEnabled(AddressPart|AllConditionParts); setPartsEnabled(AddressPart|AllConditionParts|TracePointPart|TracePointPart);
clearOtherParts(AddressPart|AllConditionParts); clearOtherParts(AddressPart|AllConditionParts|TracePointPart);
break; break;
} }
} }

View File

@@ -171,11 +171,12 @@ enum DebuggerCapabilities
BreakOnThrowAndCatchCapability = 0x200, BreakOnThrowAndCatchCapability = 0x200,
BreakConditionCapability = 0x400, //!< Conditional Breakpoints BreakConditionCapability = 0x400, //!< Conditional Breakpoints
BreakModuleCapability = 0x800, //!< Breakpoint specification includes module BreakModuleCapability = 0x800, //!< Breakpoint specification includes module
ReturnFromFunctionCapability = 0x1000, TracePointCapability = 0x1000, //!< Breakpoint specification includes module
CreateFullBacktraceCapability = 0x2000, ReturnFromFunctionCapability = 0x2000,
AddWatcherCapability = 0x4000, CreateFullBacktraceCapability = 0x4000,
WatchpointCapability = 0x8000, AddWatcherCapability = 0x8000,
ShowModuleSymbolsCapability = 0x10000, WatchpointCapability = 0x10000,
ShowModuleSymbolsCapability = 0x20000,
AllDebuggerCapabilities = 0xFFFFFFFF AllDebuggerCapabilities = 0xFFFFFFFF
}; };

View File

@@ -1861,6 +1861,7 @@ unsigned GdbEngine::debuggerCapabilities() const
| ReloadModuleSymbolsCapability | ReloadModuleSymbolsCapability
| BreakOnThrowAndCatchCapability | BreakOnThrowAndCatchCapability
| BreakConditionCapability | BreakConditionCapability
| TracePointCapability
| ReturnFromFunctionCapability | ReturnFromFunctionCapability
| CreateFullBacktraceCapability | CreateFullBacktraceCapability
| WatchpointCapability | WatchpointCapability