diff options
Diffstat (limited to 'src/qtvstools/QML')
5 files changed, 60 insertions, 6 deletions
diff --git a/src/qtvstools/QML/Debugging/AD7/QmlDebugAD7Breakpoint.cs b/src/qtvstools/QML/Debugging/AD7/QmlDebugAD7Breakpoint.cs index 32703a2c..8dc51c5d 100644 --- a/src/qtvstools/QML/Debugging/AD7/QmlDebugAD7Breakpoint.cs +++ b/src/qtvstools/QML/Debugging/AD7/QmlDebugAD7Breakpoint.cs @@ -276,8 +276,7 @@ namespace QtVsTools.Qml.Debug.AD7 void IBreakpoint.NotifyError(string errorMessage) { - QtProjectLib.Messages.PaneMessage(Vsix.Instance.Dte, - string.Format("QML Debug: {0}", errorMessage)); + Program.OutputWriteLine(errorMessage); } int IDebugBoundBreakpoint2.GetPendingBreakpoint( diff --git a/src/qtvstools/QML/Debugging/AD7/QmlDebugAD7Engine.cs b/src/qtvstools/QML/Debugging/AD7/QmlDebugAD7Engine.cs index cd2b39c3..41f6260b 100644 --- a/src/qtvstools/QML/Debugging/AD7/QmlDebugAD7Engine.cs +++ b/src/qtvstools/QML/Debugging/AD7/QmlDebugAD7Engine.cs @@ -192,6 +192,8 @@ namespace QtVsTools.Qml.Debug.AD7 DebugEvent.Send(new LoadCompleteEvent(program)); DebugEvent.Send(new EntryPointEvent(program)); + program.OutputWriteLine("Connecting to the QML runtime..."); + return VSConstants.S_OK; } @@ -262,6 +264,10 @@ namespace QtVsTools.Qml.Debug.AD7 pendingBreakpoint.Dispose(); } + public void OutputWriteLine(string msg) + { + DebugEvent.Send(new OutputStringEvent(this, msg + "\r\n")); + } #region //////////////////// Concurrent /////////////////////////////////////////////////// diff --git a/src/qtvstools/QML/Debugging/AD7/QmlDebugAD7Events.cs b/src/qtvstools/QML/Debugging/AD7/QmlDebugAD7Events.cs index 6743499e..10f42db7 100644 --- a/src/qtvstools/QML/Debugging/AD7/QmlDebugAD7Events.cs +++ b/src/qtvstools/QML/Debugging/AD7/QmlDebugAD7Events.cs @@ -254,4 +254,21 @@ namespace QtVsTools.Qml.Debug.AD7 return VSConstants.S_OK; } } + + class OutputStringEvent : DebugEvent, IDebugOutputStringEvent2 + { + string outputString; + + public OutputStringEvent(QmlEngine engine, string outputString) + : base(engine, typeof(IDebugOutputStringEvent2).GUID, ASYNCHRONOUS) + { + this.outputString = outputString; + } + + int IDebugOutputStringEvent2.GetString(out string pbstrString) + { + pbstrString = outputString; + return VSConstants.S_OK; + } + } } diff --git a/src/qtvstools/QML/Debugging/AD7/QmlDebugAD7Program.cs b/src/qtvstools/QML/Debugging/AD7/QmlDebugAD7Program.cs index 66fd5102..8e408387 100644 --- a/src/qtvstools/QML/Debugging/AD7/QmlDebugAD7Program.cs +++ b/src/qtvstools/QML/Debugging/AD7/QmlDebugAD7Program.cs @@ -151,6 +151,12 @@ namespace QtVsTools.Qml.Debug.AD7 } } + public void OutputWriteLine(string msg) + { + var execFileName = Path.GetFileName(ExecPath); + Engine.OutputWriteLine(string.Format("'{0}' (QML): {1}", execFileName, msg)); + } + bool IDebuggerEventSink.QueryRuntimeFrozen() { var debugMode = new DBGMODE[1]; @@ -166,8 +172,7 @@ namespace QtVsTools.Qml.Debug.AD7 void IDebuggerEventSink.NotifyError(string errorMessage) { - QtProjectLib.Messages.PaneMessage(Vsix.Instance.Dte, - string.Format("QML Debug: {0}", errorMessage)); + OutputWriteLine(errorMessage); } int IDebugEventCallback2.Event( diff --git a/src/qtvstools/QML/Debugging/QmlDebugLauncher.cs b/src/qtvstools/QML/Debugging/QmlDebugLauncher.cs index 571dc8af..e3a1f3c9 100644 --- a/src/qtvstools/QML/Debugging/QmlDebugLauncher.cs +++ b/src/qtvstools/QML/Debugging/QmlDebugLauncher.cs @@ -48,6 +48,7 @@ namespace QtVsTools.Qml.Debug public static Launcher Instance { get; private set; } IVsDebugger debugger; IVsDebugger4 debugger4; + IVsOutputWindowPane debugOutput; public static void Initialize() { @@ -56,6 +57,19 @@ namespace QtVsTools.Qml.Debug Instance.debugger4 = VsServiceProvider.GetService<IVsDebugger, IVsDebugger4>(); if (Instance.debugger != null && Instance.debugger4 != null) Instance.debugger.AdviseDebugEventCallback(Instance); + + var outputWindow = VsServiceProvider.GetService<SVsOutputWindow, IVsOutputWindow>(); + if (outputWindow != null) { + var debugOutputGuid = VSConstants.OutputWindowPaneGuid.DebugPane_guid; + var result = outputWindow.GetPane(ref debugOutputGuid, out Instance.debugOutput); + if (result != VSConstants.S_OK || Instance.debugOutput == null) { + Messages.PaneMessageSafe(Vsix.Instance.Dte, + "Unable to get reference to output window debug pane.", 5000); + } + } else { + Messages.PaneMessageSafe(Vsix.Instance.Dte, + "Unable to get reference to output window.", 5000); + } } private Launcher() @@ -169,6 +183,8 @@ namespace QtVsTools.Qml.Debug if (qtProject == null || !qtProject.IsQtMsBuildEnabled()) continue; + OutputWriteLine(string.Format("Debugging project '{0}'", vcProject.Name)); + var execArgs = props.GetPropertyValue("LocalDebuggerCommandArguments", vcConfig.Name, "UserFile"); if (string.IsNullOrEmpty(execArgs)) @@ -179,6 +195,8 @@ namespace QtVsTools.Qml.Debug if (!QmlDebugger.CheckCommandLine(execPath, cmd)) continue; + OutputWriteLine("QML debugging enabled"); + execCmd = cmd; rccItems = ((IVCCollection)vcProject.Files).Cast<VCFile>() .Where(x => x.ItemType == QtRcc.ItemTypeName) @@ -187,9 +205,17 @@ namespace QtVsTools.Qml.Debug return true; } + OutputWriteLine("QML debugging disabled"); + return false; } + void OutputWriteLine(string msg) + { + if (debugOutput != null) + debugOutput.OutputString(string.Format("Qt VS Tools: {0}\r\n", msg)); + } + void LaunchDebug( string execPath, string execCmd, @@ -207,13 +233,14 @@ namespace QtVsTools.Qml.Debug LaunchFlags = (uint)__VSDBGLAUNCHFLAGS5.DBGLAUNCH_BreakOneProcess, }}; + OutputWriteLine("Starting QML debug engine..."); + var processInfo = new VsDebugTargetProcessInfo[targets.Length]; try { debugger4.LaunchDebugTargets4((uint)targets.Length, targets, processInfo); } catch (Exception e) { - Messages.PaneMessageSafe(Vsix.Instance.Dte, - e.Message + "\r\n\r\nStacktrace:\r\n" + e.StackTrace, 5000); + OutputWriteLine(e.Message + "\r\n\r\nStacktrace:\r\n" + e.StackTrace); } } } |