debugger: basic support for address-based breakpoints

This commit is contained in:
hjk
2010-04-09 14:55:09 +02:00
parent 0ea0977ca8
commit 4eb83cd8b2
5 changed files with 44 additions and 10 deletions

View File

@@ -378,9 +378,16 @@ int BreakHandler::findBreakpoint(const BreakpointData &needle) const
int BreakHandler::findBreakpoint(const QString &fileName, int lineNumber) const
{
for (int index = 0; index != size(); ++index)
if (at(index)->isLocatedAt(fileName, lineNumber))
return index;
if (lineNumber <= 0) {
QByteArray address = fileName.toLatin1();
for (int index = 0; index != size(); ++index)
if (at(index)->bpAddress == address)
return index;
} else {
for (int index = 0; index != size(); ++index)
if (at(index)->isLocatedAt(fileName, lineNumber))
return index;
}
return -1;
}
@@ -710,11 +717,22 @@ void BreakHandler::setBreakpoint(const QString &fileName, int lineNumber)
QFileInfo fi(fileName);
BreakpointData *data = new BreakpointData(this);
data->fileName = fileName;
data->lineNumber = QByteArray::number(lineNumber);
data->pending = true;
data->setMarkerFileName(fileName);
data->setMarkerLineNumber(lineNumber);
if (lineNumber > 0) {
data->fileName = fileName;
data->lineNumber = QByteArray::number(lineNumber);
data->pending = true;
data->setMarkerFileName(fileName);
data->setMarkerLineNumber(lineNumber);
} else {
data->funcName = fileName;
data->lineNumber = 0;
data->pending = true;
// FIXME: Figure out in which disassembler view the Marker sits.
// Might be better to let the user code create the BreakpointData
// structure and insert it here.
data->setMarkerFileName(QString());
data->setMarkerLineNumber(0);
}
append(data);
emit layoutChanged();
saveBreakpoints();