From ca47896204482bf4a6979e3838bf7f09f61cebeb Mon Sep 17 00:00:00 2001
From: giy <giy@omp-system.ru>
Date: Fri, 02 Sep 2022 14:16:56 +0300
Subject: [PATCH] Обновление до версии 2.9.0
---
QtVsTools.Package/QML/Debugging/AD7/QmlDebugAD7Program.cs | 80 ++++++++++++++++++++++++---------------
1 files changed, 49 insertions(+), 31 deletions(-)
diff --git a/QtVsTools.Package/QML/Debugging/AD7/QmlDebugAD7Program.cs b/QtVsTools.Package/QML/Debugging/AD7/QmlDebugAD7Program.cs
index 6a7cee4..0111f31 100644
--- a/QtVsTools.Package/QML/Debugging/AD7/QmlDebugAD7Program.cs
+++ b/QtVsTools.Package/QML/Debugging/AD7/QmlDebugAD7Program.cs
@@ -29,18 +29,16 @@
using System;
using System.Collections.Generic;
using System.IO;
-using System.Linq;
-using System.Text;
-using System.Threading;
using System.Windows.Threading;
using Microsoft.VisualStudio;
using Microsoft.VisualStudio.Debugger.Interop;
using Microsoft.VisualStudio.Shell;
using Microsoft.VisualStudio.Shell.Interop;
-using QtVsTools.VisualStudio;
namespace QtVsTools.Qml.Debug.AD7
{
+ using VisualStudio;
+
sealed partial class Program : Disposable, IDebuggerEventSink,
IDebugProgramNode2, // "This interface represents a program that can be debugged."
@@ -64,21 +62,21 @@
public QmlEngine Engine { get; private set; }
- public List<StackFrame> CurrentFrames { get; private set; }
+ private List<StackFrame> CurrentFrames { get; set; }
- public const string Name = "QML Debugger";
- public Guid ProcessId { get; private set; }
+ private const string Name = "QML Debugger";
+ public Guid ProcessId { get; set; }
public Guid ProgramId { get; set; }
- public IDebugProcess2 NativeProc { get; private set; }
- public uint NativeProcId { get; private set; }
- public string ExecPath { get; private set; }
- public string ExecArgs { get; private set; }
- public IVsDebugger VsDebugger { get; private set; }
- Dispatcher vsDebuggerThreadDispatcher;
+ private IDebugProcess2 NativeProc { get; set; }
+ private uint NativeProcId { get; set; }
+ private string ExecPath { get; set; }
+ private string ExecArgs { get; set; }
+ private IVsDebugger VsDebugger { get; set; }
+ private Dispatcher vsDebuggerThreadDispatcher;
- private readonly static object criticalSectionGlobal = new object();
- static bool originalBreakAllProcesses = BreakAllProcesses;
- static int runningPrograms = 0;
+ private static readonly object criticalSectionGlobal = new object();
+ private static bool originalBreakAllProcesses = BreakAllProcesses;
+ private static int runningPrograms = 0;
public static Program Create(
QmlEngine engine,
@@ -114,8 +112,13 @@
return false;
VsDebugger = VsServiceProvider.GetService<IVsDebugger>();
- if (VsDebugger != null)
- VsDebugger.AdviseDebugEventCallback(this as IDebugEventCallback2);
+ if (VsDebugger != null) {
+ ThreadHelper.JoinableTaskFactory.Run(async () =>
+ {
+ await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();
+ VsDebugger.AdviseDebugEventCallback(this);
+ });
+ }
vsDebuggerThreadDispatcher = Dispatcher.CurrentDispatcher;
ProcessId = Guid.NewGuid();
@@ -141,8 +144,13 @@
protected override void DisposeManaged()
{
Debugger.Dispose();
- if (VsDebugger != null)
- VsDebugger.UnadviseDebugEventCallback(this as IDebugEventCallback2);
+ if (VsDebugger != null) {
+ ThreadHelper.JoinableTaskFactory.Run(async () =>
+ {
+ await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();
+ VsDebugger.UnadviseDebugEventCallback(this as IDebugEventCallback2);
+ });
+ }
lock (criticalSectionGlobal) {
runningPrograms--;
@@ -161,9 +169,12 @@
{
var debugMode = new DBGMODE[1];
int res = VSConstants.S_FALSE;
- vsDebuggerThreadDispatcher
- .BeginInvoke(new Action(() => res = VsDebugger.GetMode(debugMode)), new object[0])
- .Wait();
+
+ QtVsToolsPackage.Instance.JoinableTaskFactory.Run(async () =>
+ {
+ await QtVsToolsPackage.Instance.JoinableTaskFactory.SwitchToMainThreadAsync();
+ res = VsDebugger.GetMode(debugMode);
+ });
if (res != VSConstants.S_OK)
return false;
@@ -295,17 +306,24 @@
{
get
{
- return ((bool)QtVsToolsPackage.Instance.Dte
- .Properties["Debugging", "General"]
- .Item("BreakAllProcesses")
- .Value);
+ return ThreadHelper.JoinableTaskFactory.Run(async () => {
+ await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();
+ return ((bool)QtVsToolsPackage.Instance.Dte
+ .Properties["Debugging", "General"]
+ .Item("BreakAllProcesses")
+ .Value);
+ });
}
set
{
- QtVsToolsPackage.Instance.Dte
- .Properties["Debugging", "General"]
- .Item("BreakAllProcesses")
- .let_Value(value ? "True" : "False");
+ ThreadHelper.JoinableTaskFactory.Run(async () =>
+ {
+ await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();
+ QtVsToolsPackage.Instance.Dte
+ .Properties["Debugging", "General"]
+ .Item("BreakAllProcesses")
+ .let_Value(value ? "True" : "False");
+ });
}
}
--
Gitblit v1.9.1