aboutsummaryrefslogtreecommitdiffstats
path: root/src/qtvstools/QML
diff options
context:
space:
mode:
Diffstat (limited to 'src/qtvstools/QML')
-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);
}
}
}