diff options
author | Karsten Heimrich <karsten.heimrich@qt.io> | 2022-08-11 15:40:01 +0200 |
---|---|---|
committer | Karsten Heimrich <karsten.heimrich@qt.io> | 2022-08-12 07:03:10 +0000 |
commit | e43d65dd75dbbe0ab5c5900a5a9a2b168334e8cd (patch) | |
tree | 91aaf457ba2e9d846f836db14361274592fa32e2 | |
parent | 5881fd04989fd2a0d4cbc07a7880fa4633844a09 (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.cs | 31 | ||||
-rw-r--r-- | QtVsTools.Core/ProjectImporter.cs | 2 | ||||
-rw-r--r-- | QtVsTools.Core/QMake.cs | 6 | ||||
-rw-r--r-- | QtVsTools.Core/QtProject.cs | 24 | ||||
-rw-r--r-- | QtVsTools.Package/Common/Json/Serializer.cs | 21 | ||||
-rw-r--r-- | QtVsTools.Package/Editors/Editor.cs | 5 | ||||
-rw-r--r-- | QtVsTools.Package/Legacy/QtOptionsPage.cs | 6 | ||||
-rw-r--r-- | QtVsTools.Package/Options/QtOptionsPage.cs | 6 | ||||
-rw-r--r-- | QtVsTools.Package/Options/QtVersionsPage.cs | 12 | ||||
-rw-r--r-- | QtVsTools.Package/Package/QtHelp.cs | 4 | ||||
-rw-r--r-- | QtVsTools.Package/Package/Translation.cs | 5 | ||||
-rw-r--r-- | QtVsTools.Package/QML/Debugging/QmlDebugLauncher.cs | 4 | ||||
-rw-r--r-- | QtVsTools.Package/QML/Debugging/QmlFileSystem.cs | 5 | ||||
-rw-r--r-- | QtVsTools.Package/QtMsBuild/QtProjectTracker.cs | 10 | ||||
-rw-r--r-- | QtVsTools.Package/QtVsToolsPackage.cs | 10 | ||||
-rw-r--r-- | QtVsTools.Wizards/ProjectWizard/ProjectTemplateWizard.cs | 2 |
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); |