aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiguel Costa <miguel.costa@qt.io>2018-12-20 18:27:32 +0100
committerMiguel Costa <miguel.costa@qt.io>2019-01-07 14:33:26 +0000
commitf826db692bbc682ca90e736977ccb2d82f2216fa (patch)
treeb401aa67060fac8c77a20bd19eb350bffa7e6ea2
parente76a53f6d5816d102c9c7b876c6c175f74056b10 (diff)
Add debug messages to the QML debug engine
Issue some additional debug messages from the QML debug engine. These messages will be shown in the 'Debug' output window of Visual Studio. Task-number: QTVSADDINBUG-599 Change-Id: I30e26b8c90189cd80d0cf05c516a5a61100ab08e Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
-rw-r--r--src/qtvstools/QML/Debugging/AD7/QmlDebugAD7Breakpoint.cs3
-rw-r--r--src/qtvstools/QML/Debugging/AD7/QmlDebugAD7Engine.cs6
-rw-r--r--src/qtvstools/QML/Debugging/AD7/QmlDebugAD7Events.cs17
-rw-r--r--src/qtvstools/QML/Debugging/AD7/QmlDebugAD7Program.cs9
-rw-r--r--src/qtvstools/QML/Debugging/QmlDebugLauncher.cs31
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);
}
}
}