Debugger[CDB]: Use new disassembler structures.

Parse CDB's ASM output, set it up with source line.
Move convenience to add source lines into DisassemblerLines
(cached).
This commit is contained in:
Friedemann Kleint
2011-04-13 13:52:03 +02:00
parent d34c81a2a6
commit 292119bb6a
6 changed files with 200 additions and 26 deletions

View File

@@ -36,6 +36,8 @@
#include <QtCore/QDebug>
#include <QtCore/QRegExp>
#include <QtCore/QFile>
#include <QtCore/QTextStream>
namespace Debugger {
namespace Internal {
@@ -95,6 +97,39 @@ void DisassemblerLines::appendLine(const DisassemblerLine &dl)
m_rowCache[dl.address] = m_data.size();
}
// Append source line: Cache current file
struct SourceFileCache
{
QString fileName;
QStringList lines;
};
Q_GLOBAL_STATIC(SourceFileCache, sourceFileCache)
void DisassemblerLines::appendSourceLine(const QString &fileName, uint lineNumber)
{
if (fileName.isEmpty() || lineNumber == 0)
return;
lineNumber--; // fix 1..n range.
SourceFileCache *cache = sourceFileCache();
if (fileName != cache->fileName) {
cache->fileName = fileName;
cache->lines.clear();
QFile file(fileName);
if (file.open(QIODevice::ReadOnly)) {
QTextStream ts(&file);
cache->lines = ts.readAll().split(QLatin1Char('\n'));
} // open
} // different file
if (lineNumber >= uint(cache->lines.size()))
return;
DisassemblerLine dl;
dl.lineNumber = lineNumber;
dl.data = cache->lines.at(lineNumber);
appendLine(dl);
}
void DisassemblerLines::appendUnparsed(const QString &unparsed)
{
QString line = unparsed.trimmed();