aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKarsten Heimrich <karsten.heimrich@qt.io>2022-08-11 15:40:01 +0200
committerKarsten Heimrich <karsten.heimrich@qt.io>2022-08-12 07:03:10 +0000
commite43d65dd75dbbe0ab5c5900a5a9a2b168334e8cd (patch)
tree91aaf457ba2e9d846f836db14361274592fa32e2
parent5881fd04989fd2a0d4cbc07a7880fa4633844a09 (diff)
Introduce logging extension method for exceptions
* Remove DisplayCriticalErrorMessage() since the implementation is identical to DisplayErrorMessage() Change-Id: Id4f4d394477ceefb31e31772164072b2498225a8 Reviewed-by: Miguel Costa <miguel.costa@qt.io>
-rw-r--r--QtVsTools.Core/Messages.cs31
-rw-r--r--QtVsTools.Core/ProjectImporter.cs2
-rw-r--r--QtVsTools.Core/QMake.cs6
-rw-r--r--QtVsTools.Core/QtProject.cs24
-rw-r--r--QtVsTools.Package/Common/Json/Serializer.cs21
-rw-r--r--QtVsTools.Package/Editors/Editor.cs5
-rw-r--r--QtVsTools.Package/Legacy/QtOptionsPage.cs6
-rw-r--r--QtVsTools.Package/Options/QtOptionsPage.cs6
-rw-r--r--QtVsTools.Package/Options/QtVersionsPage.cs12
-rw-r--r--QtVsTools.Package/Package/QtHelp.cs4
-rw-r--r--QtVsTools.Package/Package/Translation.cs5
-rw-r--r--QtVsTools.Package/QML/Debugging/QmlDebugLauncher.cs4
-rw-r--r--QtVsTools.Package/QML/Debugging/QmlFileSystem.cs5
-rw-r--r--QtVsTools.Package/QtMsBuild/QtProjectTracker.cs10
-rw-r--r--QtVsTools.Package/QtVsToolsPackage.cs10
-rw-r--r--QtVsTools.Wizards/ProjectWizard/ProjectTemplateWizard.cs2
16 files changed, 66 insertions, 87 deletions
diff --git a/QtVsTools.Core/Messages.cs b/QtVsTools.Core/Messages.cs
index ae68b6e8..ffa8bd01 100644
--- a/QtVsTools.Core/Messages.cs
+++ b/QtVsTools.Core/Messages.cs
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2022 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt VS Tools.
@@ -29,11 +29,9 @@
using System;
using System.Collections.Concurrent;
using System.Threading;
-using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.VisualStudio.Shell;
using Microsoft.VisualStudio.Threading;
-using EnvDTE;
using Task = System.Threading.Tasks.Task;
@@ -62,6 +60,17 @@ namespace QtVsTools.Core
FlushMessages();
}
+ public static void Log(this Exception exception, bool clear = false, bool activate = false)
+ {
+ msgQueue.Enqueue(new Msg()
+ {
+ Clear = clear,
+ Text = ExceptionToString(exception),
+ Activate = activate
+ });
+ FlushMessages();
+ }
+
/// <summary>
/// Activates the message pane of the Qt VS Tools extension.
/// </summary>
@@ -80,22 +89,17 @@ namespace QtVsTools.Core
await Pane?.ActivateAsync();
}
- private static string ExceptionToString(System.Exception e)
+ private static string ExceptionToString(System.Exception exception)
{
- return e.Message + "\r\n" + "(" + e.StackTrace.Trim() + ")";
+ return $"An exception ({exception.GetType().Name}) occurred.\r\n"
+ + $"Message:\r\n {exception.Message}\r\n"
+ + $"Stack Trace:\r\n {exception.StackTrace.Trim()}\r\n";
}
private static readonly string ErrorString = SR.GetString("Messages_ErrorOccured");
private static readonly string WarningString = SR.GetString("Messages_Warning");
private static readonly string SolutionString = SR.GetString("Messages_SolveProblem");
- public static void DisplayCriticalErrorMessage(System.Exception e)
- {
- MessageBox.Show(ErrorString +
- ExceptionToString(e),
- SR.GetString("Resources_QtVsTools"), MessageBoxButtons.OK, MessageBoxIcon.Error);
- }
-
public static void DisplayCriticalErrorMessage(string msg)
{
MessageBox.Show(ErrorString +
@@ -105,8 +109,7 @@ namespace QtVsTools.Core
public static void DisplayErrorMessage(System.Exception e)
{
- MessageBox.Show(ErrorString +
- ExceptionToString(e),
+ MessageBox.Show(ExceptionToString(e),
SR.GetString("Resources_QtVsTools"), MessageBoxButtons.OK, MessageBoxIcon.Error);
}
diff --git a/QtVsTools.Core/ProjectImporter.cs b/QtVsTools.Core/ProjectImporter.cs
index bdb0ef1e..58cbcd55 100644
--- a/QtVsTools.Core/ProjectImporter.cs
+++ b/QtVsTools.Core/ProjectImporter.cs
@@ -105,7 +105,7 @@ namespace QtVsTools.Core
Messages.Print("--- (Import): Finished opening " + VCInfo.Name);
} catch (Exception e) {
- Messages.DisplayCriticalErrorMessage(e);
+ Messages.DisplayErrorMessage(e);
}
}
diff --git a/QtVsTools.Core/QMake.cs b/QtVsTools.Core/QMake.cs
index bb96d4f1..2122e709 100644
--- a/QtVsTools.Core/QMake.cs
+++ b/QtVsTools.Core/QMake.cs
@@ -197,10 +197,8 @@ namespace QtVsTools.Core
exitCode = qmakeProc.ExitCode;
InfoExit(qmakeProc);
}
- } catch (Exception e) {
- ErrMsg(string.Format("Exception \"{0}\":\r\n{1}",
- e.Message,
- e.StackTrace));
+ } catch (Exception exception) {
+ exception.Log();
}
}
return exitCode;
diff --git a/QtVsTools.Core/QtProject.cs b/QtVsTools.Core/QtProject.cs
index a9adf9fd..f17d86dd 100644
--- a/QtVsTools.Core/QtProject.cs
+++ b/QtVsTools.Core/QtProject.cs
@@ -108,9 +108,8 @@ namespace QtVsTools.Core
return string.Empty;
try {
return config.GetEvaluatedPropertyValue(itemType + "RuleName");
- } catch (Exception e) {
- System.Diagnostics.Debug.WriteLine(
- e.Message + "\r\n\r\nStacktrace:\r\n" + e.StackTrace);
+ } catch (Exception exception) {
+ exception.Log();
return string.Empty;
}
}
@@ -2515,8 +2514,8 @@ namespace QtVsTools.Core
try {
RemoveMocStep(file);
AddMocStep(file);
- } catch (QtVSException e) {
- Messages.Print(e.Message);
+ } catch (QtVSException exception) {
+ exception.Log();
continue;
}
Messages.Print("Moc step updated successfully for " + file.Name + ".");
@@ -3062,9 +3061,8 @@ namespace QtVsTools.Core
var projProps = vcProj as IVCBuildPropertyStorage;
try {
return projProps.GetPropertyValue(pszPropName, Config.Name, "UserFile");
- } catch (Exception e) {
- System.Diagnostics.Debug.WriteLine(
- e.Message + "\r\n\r\nStacktrace:\r\n" + e.StackTrace);
+ } catch (Exception exception) {
+ exception.Log();
return string.Empty;
}
}
@@ -3075,9 +3073,8 @@ namespace QtVsTools.Core
var projProps = vcProj as IVCBuildPropertyStorage;
try {
projProps.SetPropertyValue(pszPropName, Config.Name, "UserFile", pszPropValue);
- } catch (Exception e) {
- System.Diagnostics.Debug.WriteLine(
- e.Message + "\r\n\r\nStacktrace:\r\n" + e.StackTrace);
+ } catch (Exception exception) {
+ exception.Log();
}
}
@@ -3087,9 +3084,8 @@ namespace QtVsTools.Core
var projProps = vcProj as IVCBuildPropertyStorage;
try {
projProps.RemoveProperty(pszPropName, Config.Name, "UserFile");
- } catch (Exception e) {
- System.Diagnostics.Debug.WriteLine(
- e.Message + "\r\n\r\nStacktrace:\r\n" + e.StackTrace);
+ } catch (Exception exception) {
+ exception.Log();
}
}
}
diff --git a/QtVsTools.Package/Common/Json/Serializer.cs b/QtVsTools.Package/Common/Json/Serializer.cs
index 14c49933..13574136 100644
--- a/QtVsTools.Package/Common/Json/Serializer.cs
+++ b/QtVsTools.Package/Common/Json/Serializer.cs
@@ -36,6 +36,7 @@ using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.Text;
using System.Xml;
+using QtVsTools.Core;
/// <summary>
/// The classes in this namespace provide support to the serialization and deserialization of
@@ -127,11 +128,10 @@ namespace QtVsTools.Json
serializer.WriteObject(writer, obj);
writer.Close();
return new JsonData() { Stream = stream };
- } catch (Exception e) {
+ } catch (Exception exception) {
+ exception.Log();
if (stream != null && stream.CanRead && stream.Length > 0)
stream.Dispose();
- System.Diagnostics.Debug.WriteLine(
- e.Message + "\r\n\r\nStacktrace:\r\n" + e.StackTrace);
return null;
}
}
@@ -157,9 +157,8 @@ namespace QtVsTools.Json
return obj;
}
- } catch (Exception e) {
- System.Diagnostics.Debug.WriteLine(
- e.Message + "\r\n\r\nStacktrace:\r\n" + e.StackTrace);
+ } catch (Exception exception) {
+ exception.Log();
return null;
} finally {
@@ -205,9 +204,8 @@ namespace QtVsTools.Json
data.XmlStream = new MemoryStream(xmlData);
}
return true;
- } catch (Exception e) {
- System.Diagnostics.Debug.WriteLine(
- e.Message + "\r\n\r\nStacktrace:\r\n" + e.StackTrace);
+ } catch (Exception exception) {
+ exception.Log();
return false;
}
}
@@ -259,9 +257,8 @@ namespace QtVsTools.Json
root.Append("</root>");
var xmlData = Encoding.UTF8.GetBytes(root.ToString());
return new JsonData { XmlStream = new MemoryStream(xmlData) };
- } catch (Exception e) {
- System.Diagnostics.Debug.WriteLine(
- e.Message + "\r\n\r\nStacktrace:\r\n" + e.StackTrace);
+ } catch (Exception exception) {
+ exception.Log();
return null;
}
}
diff --git a/QtVsTools.Package/Editors/Editor.cs b/QtVsTools.Package/Editors/Editor.cs
index 34538c47..f8158cb8 100644
--- a/QtVsTools.Package/Editors/Editor.cs
+++ b/QtVsTools.Package/Editors/Editor.cs
@@ -213,13 +213,12 @@ namespace QtVsTools.Editors
var st = GetStartInfo(filePath, qtToolsPath, hideWindow);
try {
return Process.Start(st);
- } catch (Exception e) {
- Messages.Print("\r\n" + e.Message);
+ } catch (Exception exception) {
+ exception.Log();
if (!File.Exists(st.Arguments))
Messages.Print("The system cannot find the file: " + st.Arguments);
if (!File.Exists(st.FileName))
Messages.Print("The system cannot find the file: " + st.FileName);
- Messages.Print("\r\nStacktrace:\r\n" + e.StackTrace);
return null;
}
}
diff --git a/QtVsTools.Package/Legacy/QtOptionsPage.cs b/QtVsTools.Package/Legacy/QtOptionsPage.cs
index c801f5b0..f23933e0 100644
--- a/QtVsTools.Package/Legacy/QtOptionsPage.cs
+++ b/QtVsTools.Package/Legacy/QtOptionsPage.cs
@@ -130,8 +130,7 @@ namespace QtVsTools.Legacy
PreBuildSetup = (preBuild != 0);
}
} catch (Exception exception) {
- Messages.Print(
- exception.Message + "\r\n\r\nStacktrace:\r\n" + exception.StackTrace);
+ exception.Log();
}
}
@@ -155,8 +154,7 @@ namespace QtVsTools.Legacy
key.SetValue(VALUENAME_LegacyPreBuild, PreBuildSetup ? 1 : 0);
}
} catch (Exception exception) {
- Messages.Print(
- exception.Message + "\r\n\r\nStacktrace:\r\n" + exception.StackTrace);
+ exception.Log();
}
}
}
diff --git a/QtVsTools.Package/Options/QtOptionsPage.cs b/QtVsTools.Package/Options/QtOptionsPage.cs
index d8f8df2a..2b418012 100644
--- a/QtVsTools.Package/Options/QtOptionsPage.cs
+++ b/QtVsTools.Package/Options/QtOptionsPage.cs
@@ -306,8 +306,7 @@ namespace QtVsTools.Options
Load(() => LinkNatvis, key, Natvis.Link);
}
} catch (Exception exception) {
- Messages.Print(
- exception.Message + "\r\n\r\nStacktrace:\r\n" + exception.StackTrace);
+ exception.Log();
}
}
@@ -341,8 +340,7 @@ namespace QtVsTools.Options
Save(LinkNatvis, key, Natvis.Link);
}
} catch (Exception exception) {
- Messages.Print(
- exception.Message + "\r\n\r\nStacktrace:\r\n" + exception.StackTrace);
+ exception.Log();
}
}
diff --git a/QtVsTools.Package/Options/QtVersionsPage.cs b/QtVsTools.Package/Options/QtVersionsPage.cs
index f634abdf..5df2e25f 100644
--- a/QtVsTools.Package/Options/QtVersionsPage.cs
+++ b/QtVsTools.Package/Options/QtVersionsPage.cs
@@ -94,8 +94,7 @@ namespace QtVsTools.Options
try {
VersionManager.RemoveVersion(versionName);
} catch (Exception exception) {
- Messages.Print(exception.Message + "\r\n\r\nStacktrace:\r\n"
- + exception.StackTrace);
+ exception.Log();
}
}
@@ -142,13 +141,11 @@ namespace QtVsTools.Options
if (!string.IsNullOrEmpty(version.InitialVersionName))
VersionManager.RemoveVersion(version.InitialVersionName);
} catch (Exception exception) {
- Messages.Print(exception.Message + "\r\n\r\nStacktrace:\r\n"
- + exception.StackTrace);
+ exception.Log();
}
}
} catch (Exception exception) {
- Messages.Print(
- exception.Message + "\r\n\r\nStacktrace:\r\n" + exception.StackTrace);
+ exception.Log();
version.State = State.Removed;
RemoveVersion(version.VersionName);
}
@@ -160,8 +157,7 @@ namespace QtVsTools.Options
?? versions.FirstOrDefault(v => v.State != State.Removed);
VersionManager.SaveDefaultVersion(defaultVersion?.VersionName ?? "");
} catch (Exception exception) {
- Messages.Print(
- exception.Message + "\r\n\r\nStacktrace:\r\n" + exception.StackTrace);
+ exception.Log();
}
if (Notifications.NoQtVersion.IsOpen && VersionManager.GetVersions()?.Any() == true)
diff --git a/QtVsTools.Package/Package/QtHelp.cs b/QtVsTools.Package/Package/QtHelp.cs
index 4dc923ad..0989eceb 100644
--- a/QtVsTools.Package/Package/QtHelp.cs
+++ b/QtVsTools.Package/Package/QtHelp.cs
@@ -255,8 +255,8 @@ namespace QtVsTools
} else {
VsShellUtilities.OpenSystemBrowser(uri);
}
- } catch (Exception e) {
- Messages.Print(e.Message + "\r\n\r\nStacktrace:\r\n" + e.StackTrace);
+ } catch (Exception exception) {
+ exception.Log();
}
return true;
}
diff --git a/QtVsTools.Package/Package/Translation.cs b/QtVsTools.Package/Package/Translation.cs
index ecfa7604..aa4d7960 100644
--- a/QtVsTools.Package/Package/Translation.cs
+++ b/QtVsTools.Package/Package/Translation.cs
@@ -119,9 +119,8 @@ namespace QtVsTools
Messages.Print("translation: Legacy project format");
try {
Legacy.Translation.Run(buildAction, qtPro, selectedFiles);
- } catch (Exception e) {
- Messages.Print(
- e.Message + "\r\n\r\nStacktrace:\r\n" + e.StackTrace);
+ } catch (Exception exception) {
+ exception.Log();
}
return;
}
diff --git a/QtVsTools.Package/QML/Debugging/QmlDebugLauncher.cs b/QtVsTools.Package/QML/Debugging/QmlDebugLauncher.cs
index d383d417..39803727 100644
--- a/QtVsTools.Package/QML/Debugging/QmlDebugLauncher.cs
+++ b/QtVsTools.Package/QML/Debugging/QmlDebugLauncher.cs
@@ -314,8 +314,8 @@ namespace QtVsTools.Qml.Debug
try {
debugger4.LaunchDebugTargets4((uint)targets.Length, targets, processInfo);
- } catch (System.Exception e) {
- OutputWriteLine(e.Message + "\r\n\r\nStacktrace:\r\n" + e.StackTrace);
+ } catch (Exception exception) {
+ exception.Log();
}
}
}
diff --git a/QtVsTools.Package/QML/Debugging/QmlFileSystem.cs b/QtVsTools.Package/QML/Debugging/QmlFileSystem.cs
index 61d34dd0..952af6eb 100644
--- a/QtVsTools.Package/QML/Debugging/QmlFileSystem.cs
+++ b/QtVsTools.Package/QML/Debugging/QmlFileSystem.cs
@@ -92,9 +92,8 @@ namespace QtVsTools.Qml.Debug
using (var reader = XmlReader.Create(new StringReader(xmlText), settings)) {
rccXml = XDocument.Load(reader);
}
- } catch (Exception e) {
- System.Diagnostics.Debug.WriteLine(
- e.Message + "\r\n\r\nStacktrace:\r\n" + e.StackTrace);
+ } catch (Exception exception) {
+ exception.Log();
return;
}
diff --git a/QtVsTools.Package/QtMsBuild/QtProjectTracker.cs b/QtVsTools.Package/QtMsBuild/QtProjectTracker.cs
index 464322e8..21a8cd8b 100644
--- a/QtVsTools.Package/QtMsBuild/QtProjectTracker.cs
+++ b/QtVsTools.Package/QtMsBuild/QtProjectTracker.cs
@@ -237,9 +237,8 @@ namespace QtVsTools.QtMsBuild
PercentComplete = 0
})
as ITaskHandler2;
- } catch (Exception e) {
- Messages.Print(
- e.Message + "\r\n\r\nStacktrace:\r\n" + e.StackTrace);
+ } catch (Exception exception) {
+ exception.Log();
}
InitStatus.RegisterTask(new Task(() => throw new InvalidOperationException()));
}
@@ -258,9 +257,8 @@ namespace QtVsTools.QtMsBuild
CanBeCanceled = true,
PercentComplete = percentComplete
});
- } catch (Exception e) {
- Messages.Print(
- e.Message + "\r\n\r\nStacktrace:\r\n" + e.StackTrace);
+ } catch (Exception exception) {
+ exception.Log();
}
}
}
diff --git a/QtVsTools.Package/QtVsToolsPackage.cs b/QtVsTools.Package/QtVsToolsPackage.cs
index 27299d6d..a711bbb0 100644
--- a/QtVsTools.Package/QtVsToolsPackage.cs
+++ b/QtVsTools.Package/QtVsToolsPackage.cs
@@ -303,9 +303,8 @@ namespace QtVsTools
================================================================",
urlDownloadQtIo, devRelease));
}
- } catch (Exception e) {
- Messages.Print(
- e.Message + "\r\n\r\nStacktrace:\r\n" + e.StackTrace);
+ } catch (Exception exception) {
+ exception.Log();
} finally {
initDone.Set();
initTimer.Stop();
@@ -402,9 +401,8 @@ namespace QtVsTools
File.WriteAllText(Path.Combine(visualizersPath, natvisFile),
natvis, System.Text.Encoding.UTF8);
- } catch (Exception e) {
- Messages.Print(
- e.Message + "\r\n\r\nStacktrace:\r\n" + e.StackTrace);
+ } catch (Exception exception) {
+ exception.Log();
}
}
diff --git a/QtVsTools.Wizards/ProjectWizard/ProjectTemplateWizard.cs b/QtVsTools.Wizards/ProjectWizard/ProjectTemplateWizard.cs
index fafcfc88..67cb152f 100644
--- a/QtVsTools.Wizards/ProjectWizard/ProjectTemplateWizard.cs
+++ b/QtVsTools.Wizards/ProjectWizard/ProjectTemplateWizard.cs
@@ -240,7 +240,7 @@ namespace QtVsTools.Wizards.ProjectWizard
iVsUIShell.GetDialogOwnerHwnd(out IntPtr hwnd);
WindowHelper.ShowModal(WizardWindow, hwnd);
} catch (QtVSException exception) {
- Messages.DisplayErrorMessage(exception.Message);
+ exception.Log(false, true);
throw;
} finally {
iVsUIShell.EnableModeless(1);