Наша сборка Qt VS Tools
giy
2022-09-02 ca47896204482bf4a6979e3838bf7f09f61cebeb
QtVsTools.Package/QML/Debugging/QmlDebugger.cs
@@ -26,18 +26,19 @@
**
****************************************************************************/
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using QtVsTools.SyntaxAnalysis;
using static QtVsTools.SyntaxAnalysis.RegExpr;
using RegExprParser = QtVsTools.SyntaxAnalysis.RegExpr.Parser;
namespace QtVsTools.Qml.Debug
{
    using Common;
    using SyntaxAnalysis;
    using V4;
    using RegExprParser = SyntaxAnalysis.RegExpr.Parser;
    using static SyntaxAnalysis.RegExpr;
    struct FrameInfo
    {
@@ -69,6 +70,8 @@
    class QmlDebugger : Disposable, IMessageEventSink
    {
        static LazyFactory StaticLazy { get; } = new LazyFactory();
        IDebuggerEventSink sink;
        ProtocolDriver driver;
        string connectionHostName;
@@ -80,11 +83,11 @@
        List<Request> outbox;
        Dictionary<int, IBreakpoint> breakpoints;
        public bool Started { get; private set; }
        private bool Started { get; set; }
        public bool Running { get; private set; }
        private bool Running { get; set; }
        public string Version { get; private set; }
        private string Version { get; set; }
        public uint? ThreadId { get { return driver.ThreadId; } }
@@ -160,7 +163,7 @@
            if (!Started) {
                Running = Started = true;
                LeaveCriticalSection();
                Task.Run(() => ConnectToDebugger());
                _ = Task.Run(() => ConnectToDebugger());
            } else if (!Running) {
                Running = true;
@@ -201,7 +204,7 @@
            setBreakpoint.Arguments.Line = (int)breakpoint.Line;
            setBreakpoint.Tag = breakpoint;
            if (driver.ConnectionState == DebugClientState.Connected)
                setBreakpoint.SendAsync();
                setBreakpoint.SendRequest();
            else
                ThreadSafe(() => outbox.Add(setBreakpoint));
        }
@@ -231,7 +234,7 @@
            var reqClearBreak = Message.Create<ClearBreakpointRequest>(driver);
            reqClearBreak.Arguments.Breakpoint = breakpointNum[breakpoint];
            reqClearBreak.SendAsync();
            reqClearBreak.SendRequest();
        }
        void RefreshFrames()
@@ -286,8 +289,7 @@
            } else {
                foreach (int breakpointId in evtBreak.Body.Breakpoints) {
                    IBreakpoint breakpoint;
                    if (!breakpoints.TryGetValue(breakpointId, out breakpoint))
                    if (!breakpoints.TryGetValue(breakpointId, out IBreakpoint breakpoint))
                        continue;
                    breakpoint.NotifyBreak();
                }
@@ -406,20 +408,20 @@
        {
            if (oldState != DebugClientState.Unavailable
                && newState == DebugClientState.Disconnected) {
                Task.Run(() => sink.NotifyClientDisconnected());
                _ = Task.Run(() => sink.NotifyClientDisconnected());
            }
        }
        void IMessageEventSink.NotifyRequestResponded(Request msgRequest)
        {
            if (msgRequest is SetBreakpointRequest)
                Task.Run(() => SetBreakpointResponded(msgRequest as SetBreakpointRequest));
                _ = Task.Run(() => SetBreakpointResponded(msgRequest as SetBreakpointRequest));
        }
        void IMessageEventSink.NotifyEvent(Event msgEvent)
        {
            if (msgEvent is BreakEvent)
                Task.Run(() => BreakNotified(msgEvent as BreakEvent));
                _ = Task.Run(() => BreakNotified(msgEvent as BreakEvent));
        }
        void IMessageEventSink.NotifyMessage(Message msg)
@@ -430,13 +432,7 @@
        public static bool CheckCommandLine(string execPath, string args)
        {
            ushort portFrom;
            ushort portTo;
            string hostName;
            string fileName;
            bool block;
            return ParseCommandLine(
                execPath, args, out portFrom, out portTo, out hostName, out fileName, out block);
            return ParseCommandLine(execPath, args, out _, out _, out _, out _, out _);
        }
        /// <summary>
@@ -456,8 +452,8 @@
        /// <summary>
        /// Regex-based parser for QML debug connection parameters
        /// </summary>
        static RegExprParser ConnectParamsParser => _ConnectParamsParser ?? (
            _ConnectParamsParser = new Token(TokenId.ConnectParams, RxConnectParams)
        static RegExprParser ConnectParamsParser => StaticLazy.Get(() =>
            ConnectParamsParser, () => new Token(TokenId.ConnectParams, RxConnectParams)
            {
                new Rule<ConnectParams>
                {
@@ -469,7 +465,6 @@
                }
            }
            .Render());
        static RegExprParser _ConnectParamsParser;
        /// <summary>
        /// Regular expression for parsing connection parameters string in the form: