diff options
author | Friedemann Kleint <Friedemann.Kleint@nokia.com> | 2011-04-13 13:52:03 +0200 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@nokia.com> | 2011-04-13 13:56:53 +0200 |
commit | 292119bb6a4627d1e88a6ae80ea7b357ee7d1ceb (patch) | |
tree | f98e0fe1f52a674ee2ab038867db45869289aa2d /src/plugins/debugger/disassemblerlines.cpp | |
parent | d34c81a2a6dfa71f16015613b5d669b546884e0c (diff) | |
download | qt-creator-292119bb6a4627d1e88a6ae80ea7b357ee7d1ceb.tar.gz |
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).
Diffstat (limited to 'src/plugins/debugger/disassemblerlines.cpp')
-rw-r--r-- | src/plugins/debugger/disassemblerlines.cpp | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/plugins/debugger/disassemblerlines.cpp b/src/plugins/debugger/disassemblerlines.cpp index c9cba4f896..0f8523a892 100644 --- a/src/plugins/debugger/disassemblerlines.cpp +++ b/src/plugins/debugger/disassemblerlines.cpp @@ -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(); |