diff --git a/Nodejs/Product/Nodejs/Debugger/DebugEngine/AD7Engine.cs b/Nodejs/Product/Nodejs/Debugger/DebugEngine/AD7Engine.cs index e1d52914e..6457d3a87 100644 --- a/Nodejs/Product/Nodejs/Debugger/DebugEngine/AD7Engine.cs +++ b/Nodejs/Product/Nodejs/Debugger/DebugEngine/AD7Engine.cs @@ -61,7 +61,6 @@ public sealed class AD7Engine : IDebugEngine2, IDebugEngineLaunch2, IDebugProgra private AD7Thread _mainThread; private bool _sdmAttached; private bool _processLoaded; - private bool _processLoadedRunning; private bool _loadComplete; private readonly object _syncLock = new object(); private bool _attached; @@ -255,7 +254,7 @@ private void HandleLoadComplete() { } lock (_syncLock) { - if (_processLoadedRunning) { + if (_processLoaded && _process.IsRunning()) { Send(new AD7LoadCompleteRunningEvent(), AD7LoadCompleteRunningEvent.IID, _mainThread); } else { Send(new AD7LoadCompleteEvent(), AD7LoadCompleteEvent.IID, _mainThread); @@ -1125,10 +1124,9 @@ private void OnStepComplete(object sender, ThreadEventArgs e) { Send(new AD7SteppingCompleteEvent(), AD7SteppingCompleteEvent.IID, _threads[e.Thread]); } - private void OnProcessLoaded(object sender, ProcessLoadedEventArgs e) { + private void OnProcessLoaded(object sender, ThreadEventArgs e) { lock (_syncLock) { _processLoaded = true; - _processLoadedRunning = e.Running; HandleLoadComplete(); } } @@ -1138,7 +1136,6 @@ private void OnProcessExited(object sender, ProcessExitedEventArgs e) { _processExitedEvent.Set(); lock (_syncLock) { _processLoaded = false; - _processLoadedRunning = false; Send(new AD7ProgramDestroyEvent((uint)e.ExitCode), AD7ProgramDestroyEvent.IID, null); } } catch (InvalidOperationException) { @@ -1152,6 +1149,7 @@ private void OnModuleLoaded(object sender, ModuleLoadedEventArgs e) { if (_loadComplete) { SendModuleLoad(adModule); } + } } diff --git a/Nodejs/Product/Nodejs/Debugger/NodeDebugger.cs b/Nodejs/Product/Nodejs/Debugger/NodeDebugger.cs index 16bb5ff6d..8839bb6fa 100644 --- a/Nodejs/Product/Nodejs/Debugger/NodeDebugger.cs +++ b/Nodejs/Product/Nodejs/Debugger/NodeDebugger.cs @@ -243,8 +243,16 @@ public async Task BreakAllAsync() { if (asyncBreakComplete != null) { asyncBreakComplete(this, new ThreadEventArgs(MainThread)); } - } - + } + + internal bool IsRunning() { + var backtraceCommand = new BacktraceCommand(CommandId, _resultFactory, 0, 1); + if (TrySendRequestAsync(backtraceCommand).GetAwaiter().GetResult()) { + return backtraceCommand.Running; + } + return false; + } + private void DebugWriteCommand(string commandName) { LiveLogger.WriteLine("NodeDebugger Called " + commandName); } @@ -492,18 +500,17 @@ public void StartListening() { if (!backTraceTask.Wait((int)_timeout.TotalMilliseconds)) { throw new TimeoutException("Timed out while performing initial backtrace."); } - bool running = backTraceTask.GetAwaiter().GetResult(); // At this point we can fire events EventHandler newThread = ThreadCreated; if (newThread != null) { newThread(this, new ThreadEventArgs(mainThread)); - } - - EventHandler procLoaded = ProcessLoaded; + } + EventHandler procLoaded = ProcessLoaded; if (procLoaded != null) { - procLoaded(this, new ProcessLoadedEventArgs(mainThread, running)); - } + procLoaded(this, new ThreadEventArgs(MainThread)); + } + } private void OnConnectionClosed(object sender, EventArgs args) { @@ -1170,7 +1177,7 @@ internal async Task SetVariableValueAsync( /// /// Fired when the process has started and is broken into the debugger, but before any user code is run. /// - public event EventHandler ProcessLoaded; + public event EventHandler ProcessLoaded; public event EventHandler ThreadCreated; public event EventHandler ThreadExited; diff --git a/Nodejs/Product/Nodejs/Debugger/ProcessLoadedEventArgs.cs b/Nodejs/Product/Nodejs/Debugger/ProcessLoadedEventArgs.cs deleted file mode 100644 index 56d0781b4..000000000 --- a/Nodejs/Product/Nodejs/Debugger/ProcessLoadedEventArgs.cs +++ /dev/null @@ -1,33 +0,0 @@ -//*********************************************************// -// Copyright (c) Microsoft. All rights reserved. -// -// Apache 2.0 License -// -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -// implied. See the License for the specific language governing -// permissions and limitations under the License. -// -//*********************************************************// - -using System; - -namespace Microsoft.NodejsTools.Debugger { - class ProcessLoadedEventArgs : ThreadEventArgs { - private readonly bool _running; - - public ProcessLoadedEventArgs(NodeThread thread, bool running) : base(thread) { - _running = running; - } - - public bool Running { - get { - return _running; - } - } - } -} diff --git a/Nodejs/Product/Nodejs/Nodejs.csproj b/Nodejs/Product/Nodejs/Nodejs.csproj index abb769c0e..2d5349419 100644 --- a/Nodejs/Product/Nodejs/Nodejs.csproj +++ b/Nodejs/Product/Nodejs/Nodejs.csproj @@ -662,7 +662,6 @@ -