diff options
| author | Jesper K. Pedersen <jesper.pedersen@kdab.com> | 2013-04-25 17:26:14 +0200 |
|---|---|---|
| committer | Jesper K. Pedersen <jesper.pedersen@kdab.com> | 2013-04-30 06:53:33 +0200 |
| commit | fee8bd788e7ee8c2c90fd2ebc49c22e7a1b6672d (patch) | |
| tree | 2088d649b4448406d12919bfd75f84d0e028fe38 | |
| parent | 74ac0a518fcb79f14ab655ce68d424c034f6b846 (diff) | |
improve error handling
Change-Id: Id134d873cb1171c9f8b5cad90254828d93776cbd
Reviewed-by: Nicolas Arnaud-Cormos <nicolas@kdab.com>
| -rw-r--r-- | scriptmanager.cpp | 2 | ||||
| -rw-r--r-- | scriptrunner.cpp | 11 | ||||
| -rw-r--r-- | scriptrunner.h | 3 |
3 files changed, 12 insertions, 4 deletions
diff --git a/scriptmanager.cpp b/scriptmanager.cpp index 95f1130..be3f780 100644 --- a/scriptmanager.cpp +++ b/scriptmanager.cpp @@ -143,7 +143,7 @@ void ScriptManager::runFile(const QString &fileName) Utils::NormalMessageFormat); ErrorMessage message = m_runner->runScript(fileName); if (message.hasError) - Core::MessageManager::instance()->printToOutputPane(tr("Error at line %1: %2\n").arg(message.line).arg(message.message), + Core::MessageManager::instance()->printToOutputPane(tr("Error in %1 at line %3: %4\n").arg(message.fileName).arg(message.line).arg(message.message), Utils::ErrorMessageFormat); else Core::MessageManager::instance()->printToOutputPane(tr("The script exited normally\n"), diff --git a/scriptrunner.cpp b/scriptrunner.cpp index 411da03..0d99d42 100644 --- a/scriptrunner.cpp +++ b/scriptrunner.cpp @@ -69,6 +69,10 @@ ScriptRunner::~ScriptRunner() // Path to the topmost script loaded. static QString currentPath; +// The backtrace does unfortunately not include the file in which an error occurred, +// we therefore need this variable to store this information. +static QString errorFileName; + static QScriptValue run(QScriptEngine* engine, const QString& fileName, bool recursive) { QFile file(fileName); @@ -88,6 +92,8 @@ static QScriptValue run(QScriptEngine* engine, const QString& fileName, bool rec } QScriptValue result = engine->evaluate(sourceCode, fileName); + if (engine->hasUncaughtException() && errorFileName.isNull() ) + errorFileName = fileName; return result; } @@ -111,6 +117,7 @@ static QScriptValue load(QScriptContext *context, QScriptEngine *engine) ErrorMessage ScriptRunner::runScript(const QString fileName) { + errorFileName = QString(); currentPath = QFileInfo(fileName).absolutePath(); ensureEngineInitialized(); @@ -125,8 +132,8 @@ ErrorMessage ScriptRunner::runScript(const QString fileName) if (editorManager->currentEditor()) editorManager->currentEditor()->widget()->setFocus(Qt::OtherFocusReason); - if ( failed) - return ErrorMessage(m_engine->uncaughtExceptionLineNumber(), result.toString()); + if (failed) + return ErrorMessage(errorFileName, m_engine->uncaughtExceptionLineNumber(), result.toString()); return ErrorMessage(); } diff --git a/scriptrunner.h b/scriptrunner.h index 9d1dc5e..86dea44 100644 --- a/scriptrunner.h +++ b/scriptrunner.h @@ -43,9 +43,10 @@ namespace Internal { struct ErrorMessage { ErrorMessage() : hasError(false) {} - ErrorMessage(int line, const QString& message) : hasError(true), line(line), message(message) {} + ErrorMessage(const QString& fileName, int line, const QString& message) : hasError(true), fileName(fileName), line(line), message(message) {} bool hasError; + QString fileName; int line; QString message; }; |
