Browse Source

Fixed SD2-638: Crash when closing console window during debugging;

Added debugger test: DebuggeeKilled



git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@1062 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
David Srbecký 20 years ago
parent
commit
f8131d60a1
  1. 5
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/Internal/ManagedCallback.cs
  2. 2
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/NDebugger.cs
  3. 1
      src/AddIns/Misc/Debugger/Debugger.Tests/Project/Debugger.Tests.csproj
  4. 20
      src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/DebuggerTests.cs
  5. 1
      src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestProgram.cs
  6. 21
      src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/DebuggeeKilled.cs

5
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/Internal/ManagedCallback.cs

@ -77,7 +77,10 @@ namespace Debugger
{ {
handlingCallback = true; handlingCallback = true;
debugger.TraceMessage("Callback: " + name); debugger.TraceMessage("Callback: " + name);
debugger.AssertRunning(); // ExitProcess may be called at any time when debuggee is killed
if (name != "ExitProcess") {
debugger.AssertRunning();
}
} }
void ExitCallback_Continue() void ExitCallback_Continue()

2
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/NDebugger.cs

@ -131,6 +131,8 @@ namespace Debugger
ClearThreads(); ClearThreads();
currentProcess = null; currentProcess = null;
pausedHandle.Reset();
pausedReason = null;
pendingEvalsCollection.Clear(); pendingEvalsCollection.Clear();

1
src/AddIns/Misc/Debugger/Debugger.Tests/Project/Debugger.Tests.csproj

@ -54,6 +54,7 @@
<Compile Include="Src\TestPrograms\PropertyVariableForm.cs" /> <Compile Include="Src\TestPrograms\PropertyVariableForm.cs" />
<Compile Include="Src\TestPrograms\SetIP.cs" /> <Compile Include="Src\TestPrograms\SetIP.cs" />
<Compile Include="Src\TestPrograms\ArrayValue.cs" /> <Compile Include="Src\TestPrograms\ArrayValue.cs" />
<Compile Include="Src\TestPrograms\DebuggeeKilled.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Folder Include="Src" /> <Folder Include="Src" />

20
src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/DebuggerTests.cs

@ -65,12 +65,17 @@ namespace Debugger.Tests
debugger.Start(exeFilename, Path.GetDirectoryName(exeFilename), programName); debugger.Start(exeFilename, Path.GetDirectoryName(exeFilename), programName);
} }
void WaitForPause(PausedReason expectedReason, string expectedLastLogMessage) void WaitForPause(PausedReason expectedReason)
{ {
if (expectedLastLogMessage != null) expectedLastLogMessage += "\r\n";
debugger.WaitForPause(); debugger.WaitForPause();
Assert.AreEqual(true, debugger.IsPaused); Assert.AreEqual(true, debugger.IsPaused);
Assert.AreEqual(expectedReason, debugger.PausedReason); Assert.AreEqual(expectedReason, debugger.PausedReason);
}
void WaitForPause(PausedReason expectedReason, string expectedLastLogMessage)
{
WaitForPause(expectedReason);
if (expectedLastLogMessage != null) expectedLastLogMessage += "\r\n";
Assert.AreEqual(expectedLastLogMessage, lastLogMessage); Assert.AreEqual(expectedLastLogMessage, lastLogMessage);
} }
@ -170,6 +175,17 @@ namespace Debugger.Tests
} }
} }
[Test]
public void DebuggeeKilled()
{
StartProgram("DebuggeeKilled");
WaitForPause(PausedReason.Break);
Assert.AreNotEqual(null, lastLogMessage);
System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(int.Parse(lastLogMessage));
p.Kill();
debugger.WaitForPrecessExit();
}
[Test] [Test]
public void Stepping() public void Stepping()
{ {

1
src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestProgram.cs

@ -23,6 +23,7 @@ namespace Debugger.Tests
case "Break": Progs.Break.Main(); break; case "Break": Progs.Break.Main(); break;
case "Breakpoint": Progs.Breakpoint.Main(); break; case "Breakpoint": Progs.Breakpoint.Main(); break;
case "Callstack": Progs.Callstack.Main(); break; case "Callstack": Progs.Callstack.Main(); break;
case "DebuggeeKilled": Progs.DebuggeeKilled.Main(); break;
case "FileRelease": Progs.FileRelease.Main(); break; case "FileRelease": Progs.FileRelease.Main(); break;
case "FunctionArgumentVariables": Progs.FunctionArgumentVariables.Main(); break; case "FunctionArgumentVariables": Progs.FunctionArgumentVariables.Main(); break;
case "FunctionLifetime": Progs.FunctionLifetime.Main(); break; case "FunctionLifetime": Progs.FunctionLifetime.Main(); break;

21
src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/DebuggeeKilled.cs

@ -0,0 +1,21 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="David Srbecký" email="dsrbecky@gmail.com"/>
// <version>$Revision$</version>
// </file>
using System;
namespace Debugger.Tests.TestPrograms
{
public class DebuggeeKilled
{
public static void Main()
{
int id = System.Diagnostics.Process.GetCurrentProcess().Id;
System.Diagnostics.Debug.WriteLine(id.ToString());
System.Diagnostics.Debugger.Break();
}
}
}
Loading…
Cancel
Save