summaryrefslogtreecommitdiff
path: root/src/plugins/debugger/disassemblerlines.cpp
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@nokia.com>2011-04-13 13:52:03 +0200
committerFriedemann Kleint <Friedemann.Kleint@nokia.com>2011-04-13 13:56:53 +0200
commit292119bb6a4627d1e88a6ae80ea7b357ee7d1ceb (patch)
treef98e0fe1f52a674ee2ab038867db45869289aa2d /src/plugins/debugger/disassemblerlines.cpp
parentd34c81a2a6dfa71f16015613b5d669b546884e0c (diff)
downloadqt-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.cpp35
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();