diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Client.config b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Client.config
new file mode 100644
index 0000000000..86c940c827
--- /dev/null
+++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Client.config
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Debugger.AddIn.csproj b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Debugger.AddIn.csproj
index ccca107054..cb7462949e 100644
--- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Debugger.AddIn.csproj
+++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Debugger.AddIn.csproj
@@ -31,9 +31,15 @@
+
+ Always
+
Always
+
+ Always
+
@@ -78,4 +84,4 @@
-
\ No newline at end of file
+
diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Server.config b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Server.config
new file mode 100644
index 0000000000..6210beb253
--- /dev/null
+++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Server.config
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/BreakPointsPad.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/BreakPointsPad.cs
index 03475cf70f..1efa82da7d 100644
--- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/BreakPointsPad.cs
+++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/BreakPointsPad.cs
@@ -23,6 +23,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
public class BreakPointsPad : AbstractPadContent
{
WindowsDebugger debugger;
+ NDebugger debuggerCore;
ListView breakpointsList;
@@ -43,6 +44,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
void InitializeComponents()
{
debugger = (WindowsDebugger)DebuggerService.CurrentDebugger;
+ debuggerCore = debugger.DebuggerCore;
breakpointsList = new ListView();
breakpointsList.FullRowSelect = true;
@@ -59,11 +61,11 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
name.Width = 300;
path.Width = 400;
- debugger.DebuggingResumed += new DebuggerEventHandler(debuggerService_OnDebuggingResumed);
- debugger.BreakpointAdded += new DebuggerLibrary.BreakpointEventHandler(AddBreakpoint);
- debugger.BreakpointStateChanged += new DebuggerLibrary.BreakpointEventHandler(RefreshBreakpoint);
- debugger.BreakpointRemoved += new DebuggerLibrary.BreakpointEventHandler(RemoveBreakpoint);
- debugger.BreakpointHit += new DebuggerLibrary.BreakpointEventHandler(Breakpoints_OnBreakpointHit);
+ debuggerCore.DebuggingResumed += new DebuggerEventHandler(debuggerService_OnDebuggingResumed);
+ debuggerCore.BreakpointAdded += new DebuggerLibrary.BreakpointEventHandler(AddBreakpoint);
+ debuggerCore.BreakpointStateChanged += new DebuggerLibrary.BreakpointEventHandler(RefreshBreakpoint);
+ debuggerCore.BreakpointRemoved += new DebuggerLibrary.BreakpointEventHandler(RemoveBreakpoint);
+ debuggerCore.BreakpointHit += new DebuggerLibrary.BreakpointEventHandler(Breakpoints_OnBreakpointHit);
RedrawContent();
}
@@ -92,7 +94,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
breakpointsList.ItemCheck -= new ItemCheckEventHandler(BreakpointsListItemCheck);
breakpointsList.BeginUpdate();
breakpointsList.Items.Clear();
- foreach(DebuggerLibrary.Breakpoint b in debugger.Breakpoints) {
+ foreach(DebuggerLibrary.Breakpoint b in debuggerCore.Breakpoints) {
AddBreakpoint(new BreakpointEventArgs(b));
}
breakpointsList.EndUpdate();
@@ -157,7 +159,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
void debuggerService_OnDebuggingResumed(object sender, DebuggerEventArgs e)
{
breakpointsList.BeginUpdate();
- foreach(DebuggerLibrary.Breakpoint b in debugger.Breakpoints)
+ foreach(DebuggerLibrary.Breakpoint b in debuggerCore.Breakpoints)
RefreshBreakpoint(this, new BreakpointEventArgs(b));
breakpointsList.EndUpdate();
}
diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/CallStackPad.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/CallStackPad.cs
index 7f3befb520..3804cfdfdc 100644
--- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/CallStackPad.cs
+++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/CallStackPad.cs
@@ -23,6 +23,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
public class CallStackPad : AbstractPadContent
{
WindowsDebugger debugger;
+ NDebugger debuggerCore;
ListView callStackList;
@@ -42,7 +43,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
void InitializeComponents()
{
- debugger = (WindowsDebugger)DebuggerService.CurrentDebugger;
+ debugger = (WindowsDebugger)DebuggerService.CurrentDebugger;
+ debuggerCore = debugger.DebuggerCore;
callStackList = new ListView();
callStackList.FullRowSelect = true;
@@ -57,8 +59,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
name.Width = 300;
language.Width = 400;
- debugger.IsDebuggingChanged += new DebuggerEventHandler(DebuggerStateChanged);
- debugger.IsProcessRunningChanged += new DebuggerEventHandler(DebuggerStateChanged);
+ debuggerCore.IsDebuggingChanged += new DebuggerEventHandler(DebuggerStateChanged);
+ debuggerCore.IsProcessRunningChanged += new DebuggerEventHandler(DebuggerStateChanged);
RedrawContent();
}
diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/ExceptionHistoryPad.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/ExceptionHistoryPad.cs
index 238114535c..120e26727e 100644
--- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/ExceptionHistoryPad.cs
+++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/ExceptionHistoryPad.cs
@@ -23,6 +23,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
public class ExceptionHistoryPad : AbstractPadContent
{
WindowsDebugger debugger;
+ NDebugger debuggerCore;
ListView exceptionHistoryList;
@@ -44,6 +45,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
void InitializeComponents()
{
debugger = (WindowsDebugger)DebuggerService.CurrentDebugger;
+ debuggerCore = debugger.DebuggerCore;
exceptionHistoryList = new ListView();
exceptionHistoryList.FullRowSelect = true;
@@ -59,8 +61,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
location.Width = 400;
time.Width = 80;
- debugger.IsDebuggingChanged += new DebuggerEventHandler(DebuggerStateChanged);
- debugger.IsProcessRunningChanged += new DebuggerEventHandler(DebuggerStateChanged);
+ debuggerCore.IsDebuggingChanged += new DebuggerEventHandler(DebuggerStateChanged);
+ debuggerCore.IsProcessRunningChanged += new DebuggerEventHandler(DebuggerStateChanged);
RedrawContent();
}
diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/LoadedModulesPad.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/LoadedModulesPad.cs
index f50444797f..35352d6738 100644
--- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/LoadedModulesPad.cs
+++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/LoadedModulesPad.cs
@@ -22,6 +22,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
public class LoadedModulesPad : AbstractPadContent
{
WindowsDebugger debugger;
+ NDebugger debuggerCore;
ListView loadedModulesList;
@@ -49,6 +50,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
void InitializeComponents()
{
debugger = (WindowsDebugger)DebuggerService.CurrentDebugger;
+ debuggerCore = debugger.DebuggerCore;
loadedModulesList = new ListView();
loadedModulesList.FullRowSelect = true;
@@ -68,8 +70,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
timestamp.Width = 0;//80;
information.Width = 130;
- debugger.ModuleLoaded += new DebuggerLibrary.ModuleEventHandler(AddModule);
- debugger.ModuleUnloaded += new DebuggerLibrary.ModuleEventHandler(RemoveModule);
+ debuggerCore.ModuleLoaded += new DebuggerLibrary.ModuleEventHandler(AddModule);
+ debuggerCore.ModuleUnloaded += new DebuggerLibrary.ModuleEventHandler(RemoveModule);
RedrawContent();
}
@@ -87,7 +89,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
information.Text = StringParser.Parse("${res:MainWindow.Windows.Debug.InformationColumn}");
loadedModulesList.Items.Clear();
- foreach(Module m in debugger.Modules) {
+ foreach(Module m in debuggerCore.Modules) {
AddModule(this, new ModuleEventArgs(m));
}
}
diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/LocalVarPad.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/LocalVarPad.cs
index 5ea5ed44d6..71fbe0d41f 100644
--- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/LocalVarPad.cs
+++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/LocalVarPad.cs
@@ -23,6 +23,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
public class LocalVarPad : AbstractPadContent
{
WindowsDebugger debugger;
+ NDebugger debuggerCore;
TreeListView localVarList;
@@ -44,6 +45,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
void InitializeComponents()
{
debugger = (WindowsDebugger)DebuggerService.CurrentDebugger;
+ debuggerCore = debugger.DebuggerCore;
ImageList imageList = new ImageList();
imageList.Images.Add(IconService.GetBitmap("Icons.16x16.Class"));
@@ -65,7 +67,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
localVarList.BeforeExpand += new TreeListViewCancelEventHandler(localVarList_BeforeExpand);
- debugger.DebuggingPaused += new DebuggingPausedEventHandler(debuggerService_OnDebuggingPaused);
+ debuggerCore.DebuggingPaused += new DebuggingPausedEventHandler(debuggerService_OnDebuggingPaused);
RedrawContent();
}
@@ -86,7 +88,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
localVarList.BeginUpdate();
localVarList.Items.Clear();
- AddVariables(localVarList.Items, debugger.LocalVariables);
+ AddVariables(localVarList.Items, debuggerCore.LocalVariables);
localVarList.EndUpdate();
}
diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/RunningThreadsPad.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/RunningThreadsPad.cs
index a16d0b8539..784471c949 100644
--- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/RunningThreadsPad.cs
+++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/RunningThreadsPad.cs
@@ -23,6 +23,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
public class RunningThreadsPad : AbstractPadContent
{
WindowsDebugger debugger;
+ NDebugger debuggerCore;
ListView runningThreadsList;
@@ -46,6 +47,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
void InitializeComponents()
{
debugger = (WindowsDebugger)DebuggerService.CurrentDebugger;
+ debuggerCore = debugger.DebuggerCore;
runningThreadsList = new ListView();
runningThreadsList.FullRowSelect = true;
@@ -64,10 +66,10 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
breaked.Width = 80;
- debugger.ThreadStarted += new ThreadEventHandler(AddThread);
- debugger.ThreadStateChanged += new ThreadEventHandler(RefreshThread);
- debugger.ThreadExited += new ThreadEventHandler(RemoveThread);
- debugger.IsProcessRunningChanged += new DebuggerEventHandler(DebuggerStateChanged);
+ debuggerCore.ThreadStarted += new ThreadEventHandler(AddThread);
+ debuggerCore.ThreadStateChanged += new ThreadEventHandler(RefreshThread);
+ debuggerCore.ThreadExited += new ThreadEventHandler(RemoveThread);
+ debuggerCore.IsProcessRunningChanged += new DebuggerEventHandler(DebuggerStateChanged);
RedrawContent();
}
@@ -134,7 +136,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
private void RefreshAllItems()
{
- foreach (Thread t in debugger.Threads) {
+ foreach (Thread t in debuggerCore.Threads) {
RefreshThread(this, new ThreadEventArgs(t));
}
}
diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/WindowsDebugger.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/WindowsDebugger.cs
index e6837d97b4..06071cb71f 100644
--- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/WindowsDebugger.cs
+++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/WindowsDebugger.cs
@@ -29,13 +29,64 @@ using ICSharpCode.SharpDevelop.Project;
//using ICSharpCode.SharpDevelop.Internal.Project;
//using ICSharpCode.SharpDevelop.Gui.Dialogs;
using ICSharpCode.SharpDevelop.Services;
+using System.Runtime.Remoting;
+using System.Reflection;
+using System.Security.Policy;
//using Reflector.UserInterface;
namespace ICSharpCode.SharpDevelop.Services
{
- public class WindowsDebugger:NDebugger, IDebugger //, IService
+ public class WindowsDebugger:IDebugger //, IService
{
+ [Serializable]
+ public class RemotingConfigurationHelpper
+ {
+ public string path;
+
+ public RemotingConfigurationHelpper(string path)
+ {
+ this.path = path;
+ }
+
+ public void Configure()
+ {
+ AppDomain.CurrentDomain.AssemblyResolve += AssemblyResolve;
+
+ RemotingConfiguration.Configure(Path.Combine(path, "Client.config"));
+
+ string baseDir = Directory.GetDirectoryRoot(AppDomain.CurrentDomain.BaseDirectory);
+ string relDirs = AppDomain.CurrentDomain.BaseDirectory + ";" + path;
+ AppDomain serverAppDomain = AppDomain.CreateDomain("Debugging server",
+ new Evidence(AppDomain.CurrentDomain.Evidence),
+ baseDir,
+ relDirs,
+ AppDomain.CurrentDomain.ShadowCopyFiles);
+ serverAppDomain.DoCallBack(new CrossAppDomainDelegate(ConfigureServer));
+ }
+
+ private void ConfigureServer()
+ {
+ AppDomain.CurrentDomain.AssemblyResolve += AssemblyResolve;
+ RemotingConfiguration.Configure(Path.Combine(path, "Server.config"));
+ }
+
+ Assembly AssemblyResolve(object sender, ResolveEventArgs args)
+ {
+ foreach (System.Reflection.Assembly assembly in AppDomain.CurrentDomain.GetAssemblies()) {
+ string fullFilename = assembly.Location;
+ if (Path.GetFileNameWithoutExtension(fullFilename).ToLower() == args.Name.ToLower()) {
+ return assembly;
+ }
+ }
+ return null;
+ }
+ }
+
+ bool useRemotingForThreadInterop = false;
+
+ NDebugger debugger;
+
public event EventHandler DebugStopped; // FIX: unused
List exceptionHistory = new List();
@@ -52,7 +103,11 @@ namespace ICSharpCode.SharpDevelop.Services
}
-
+ public NDebugger DebuggerCore {
+ get {
+ return debugger;
+ }
+ }
MessageViewCategory messageViewCategoryDebug;
MessageViewCategory messageViewCategoryDebuggerLog;
@@ -78,6 +133,25 @@ namespace ICSharpCode.SharpDevelop.Services
public WindowsDebugger()
{
+ if (useRemotingForThreadInterop) {
+ // This needs to be called before instance of NDebugger is created
+ string path = null;
+ foreach (System.Reflection.Assembly assembly in AppDomain.CurrentDomain.GetAssemblies()) {
+ string fullFilename = assembly.Location;
+ if (Path.GetFileName(fullFilename).ToLower() == "debugger.core.dll") {
+ path = Path.GetDirectoryName(fullFilename);
+ break;
+ }
+ }
+
+ if (path == null) {
+ throw new System.Exception("Debugger.Core.dll is not loaded");
+ }
+ new RemotingConfigurationHelpper(path).Configure();
+ }
+
+ debugger = new NDebugger();
+
InitializeService();
}
@@ -88,6 +162,15 @@ namespace ICSharpCode.SharpDevelop.Services
public void InitializeService()
{
+ debugger.DebuggerTraceMessage += new MessageEventHandler(DebuggerTraceMessage);
+ debugger.LogMessage += new MessageEventHandler(LogMessage);
+ debugger.DebuggingStarted += new DebuggerEventHandler(DebuggingStarted);
+ debugger.DebuggingPaused += new DebuggingPausedEventHandler(DebuggingPaused);
+ debugger.DebuggingResumed += new DebuggerEventHandler(DebuggingResumed);
+ debugger.DebuggingStopped += new DebuggerEventHandler(DebuggingStopped);
+ debugger.IsProcessRunningChanged += new DebuggerEventHandler(DebuggerStateChanged);
+ debugger.BreakpointStateChanged += new DebuggerLibrary.BreakpointEventHandler(RestoreSharpdevelopBreakpoint);
+
DebuggerService.BreakPointAdded += new EventHandler(RestoreNDebuggerBreakpoints);
DebuggerService.BreakPointRemoved += new EventHandler(RestoreNDebuggerBreakpoints);
DebuggerService.BreakPointChanged += new EventHandler(RestoreNDebuggerBreakpoints);
@@ -99,6 +182,13 @@ namespace ICSharpCode.SharpDevelop.Services
public void UnloadService()
{
+ debugger.DebuggerTraceMessage -= new MessageEventHandler(DebuggerTraceMessage);
+ debugger.LogMessage -= new MessageEventHandler(LogMessage);
+ debugger.DebuggingStarted -= new DebuggerEventHandler(DebuggingStarted);
+ debugger.DebuggingPaused -= new DebuggingPausedEventHandler(DebuggingPaused);
+ debugger.IsProcessRunningChanged -= new DebuggerEventHandler(DebuggerStateChanged);
+ debugger.BreakpointStateChanged -= new DebuggerLibrary.BreakpointEventHandler(RestoreSharpdevelopBreakpoint);
+
DebuggerService.BreakPointAdded -= new EventHandler(RestoreNDebuggerBreakpoints);
DebuggerService.BreakPointRemoved -= new EventHandler(RestoreNDebuggerBreakpoints);
DebuggerService.BreakPointChanged -= new EventHandler(RestoreNDebuggerBreakpoints);
@@ -110,6 +200,17 @@ namespace ICSharpCode.SharpDevelop.Services
#endregion
#region ICSharpCode.SharpDevelop.Services.IDebugger interface implementation
+ public bool IsDebugging {
+ get {
+ return debugger.IsDebugging;
+ }
+ }
+
+ public bool IsProcessRunning {
+ get {
+ return debugger.IsProcessRunning;
+ }
+ }
public bool SupportsStartStop {
get {
@@ -123,64 +224,90 @@ namespace ICSharpCode.SharpDevelop.Services
}
}
+ public void StartWithoutDebugging(System.Diagnostics.ProcessStartInfo psi)
+ {
+ debugger.StartWithoutDebugging(psi);
+ }
+
+ public void Start(string fileName, string workingDirectory, string arguments)
+ {
+ debugger.Start(fileName, workingDirectory, arguments);
+ }
+
public void Stop()
{
- this.Terminate();
+ debugger.Terminate();
+ }
+
+ public void Break()
+ {
+ debugger.Break();
+ }
+
+ public void StepInto()
+ {
+ debugger.StepInto();
+ }
+
+ public void StepOver()
+ {
+ debugger.StepOver();
+ }
+
+ public void StepOut()
+ {
+ debugger.StepOut();
+ }
+
+ public void Continue()
+ {
+ debugger.Continue();
}
-
#endregion
public void RestoreNDebuggerBreakpoints(object sender, EventArgs e)
{
- ClearBreakpoints();
+ debugger.ClearBreakpoints();
foreach (ICSharpCode.Core.Breakpoint b in DebuggerService.Breakpoints) {
- DebuggerLibrary.Breakpoint newBreakpoint = new DebuggerLibrary.Breakpoint(this, b.FileName, b.LineNumber, 0, b.IsEnabled);
+ DebuggerLibrary.Breakpoint newBreakpoint = new DebuggerLibrary.Breakpoint(debugger, b.FileName, b.LineNumber, 0, b.IsEnabled);
newBreakpoint.Tag = b;
b.Tag = newBreakpoint;
- AddBreakpoint(newBreakpoint);
+ debugger.AddBreakpoint(newBreakpoint);
}
}
- protected override void OnBreakpointStateChanged(object sender, BreakpointEventArgs e)
- {
- RestoreSharpdevelopBreakpoint(e.Breakpoint);
- }
-
- public void RestoreSharpdevelopBreakpoint(DebuggerLibrary.Breakpoint breakpoint)
+ public void RestoreSharpdevelopBreakpoint(object sender, BreakpointEventArgs e)
{
- ICSharpCode.Core.Breakpoint sdBreakpoint = breakpoint.Tag as ICSharpCode.Core.Breakpoint;
+ ICSharpCode.Core.Breakpoint sdBreakpoint = e.Breakpoint.Tag as ICSharpCode.Core.Breakpoint;
if (sdBreakpoint != null) {
- sdBreakpoint.IsEnabled = breakpoint.Enabled;
- sdBreakpoint.FileName = breakpoint.SourcecodeSegment.SourceFullFilename;
- sdBreakpoint.LineNumber = breakpoint.SourcecodeSegment.StartLine;
+ sdBreakpoint.IsEnabled = e.Breakpoint.Enabled;
+ sdBreakpoint.FileName = e.Breakpoint.SourcecodeSegment.SourceFullFilename;
+ sdBreakpoint.LineNumber = e.Breakpoint.SourcecodeSegment.StartLine;
}
}
// Output messages that report status of debugger
- protected override void OnDebuggerTraceMessage(string message)
+ void DebuggerTraceMessage(object sender, MessageEventArgs e)
{
- base.OnDebuggerTraceMessage(message);
if (messageViewCategoryDebuggerLog != null) {
- messageViewCategoryDebuggerLog.AppendText(message + "\n");
- System.Console.WriteLine(message);
+ messageViewCategoryDebuggerLog.AppendText(e.Message + "\n");
+ System.Console.WriteLine(e.Message);
}
}
-
+
// Output messages form debuged program that are caused by System.Diagnostics.Trace.WriteLine(), etc...
- protected override void OnLogMessage(string message)
+ void LogMessage(object sender, MessageEventArgs e)
{
- base.OnLogMessage(message);
- OnDebuggerTraceMessage(message);
+ DebuggerTraceMessage(this, e);
if (messageViewCategoryDebug != null) {
- messageViewCategoryDebug.AppendText(message + "\n");
+ messageViewCategoryDebug.AppendText(e.Message + "\n");
}
}
- protected override void OnDebuggingStarted()
+ void DebuggingStarted(object sender, DebuggerEventArgs e)
{
- base.OnDebuggingStarted();
// Initialize
/*PadDescriptor cmv = (CompilerMessageView)WorkbenchSingleton.Workbench.GetPad(typeof(CompilerMessageView));
if (messageViewCategoryDebug == null) {
@@ -194,25 +321,24 @@ namespace ICSharpCode.SharpDevelop.Services
messageViewCategoryDebuggerLog.ClearText();*/
}
- protected override void OnDebuggingPaused(PausedReason reason)
+ void DebuggingPaused(object sender, DebuggingPausedEventArgs e)
{
- base.OnDebuggingPaused(reason);
- if (reason == PausedReason.Exception) {
- exceptionHistory.Add(CurrentThread.CurrentException);
- if (CurrentThread.CurrentException.ExceptionType != ExceptionType.DEBUG_EXCEPTION_UNHANDLED && (CatchHandledExceptions == false)) {
+ if (e.Reason == PausedReason.Exception) {
+ exceptionHistory.Add(debugger.CurrentThread.CurrentException);
+ if (debugger.CurrentThread.CurrentException.ExceptionType != ExceptionType.DEBUG_EXCEPTION_UNHANDLED && (debugger.CatchHandledExceptions == false)) {
// Ignore the exception
Continue();
return;
}
- //MessageBox.Show("Exception was thrown in debugee:\n" + NDebugger.CurrentThread.CurrentException.ToString());
+ //MessageBox.Show("Exception was thrown in debugee:\n" + debugger.CurrentThread.CurrentException.ToString());
ExceptionForm form = new ExceptionForm();
form.label.Text = "Exception " +
- CurrentThread.CurrentException.Type +
+ debugger.CurrentThread.CurrentException.Type +
" was thrown in debugee:\n" +
- CurrentThread.CurrentException.Message;
- form.pictureBox.Image = ResourceService.GetBitmap((CurrentThread.CurrentException.ExceptionType != ExceptionType.DEBUG_EXCEPTION_UNHANDLED)?"Icons.32x32.Warning":"Icons.32x32.Error");
+ debugger.CurrentThread.CurrentException.Message;
+ form.pictureBox.Image = ResourceService.GetBitmap((debugger.CurrentThread.CurrentException.ExceptionType != ExceptionType.DEBUG_EXCEPTION_UNHANDLED)?"Icons.32x32.Warning":"Icons.32x32.Error");
form.ShowDialog(ICSharpCode.SharpDevelop.Gui.WorkbenchSingleton.MainForm);
switch (form.result) {
case ExceptionForm.Result.Break:
@@ -228,22 +354,20 @@ namespace ICSharpCode.SharpDevelop.Services
}
try {
- SelectThread(CurrentThread);
+ SelectThread(debugger.CurrentThread);
} catch (CurrentThreadNotAviableException) {}
JumpToCurrentLine();
}
- protected override void OnDebuggingResumed()
+ void DebuggingResumed(object sender, DebuggerEventArgs e)
{
- base.OnDebuggingResumed();
selectedThread = null;
selectedFunction = null;
DebuggerService.RemoveCurrentLineMarker();
}
- protected override void OnDebuggingStopped()
+ void DebuggingStopped(object sender, DebuggerEventArgs e)
{
- base.OnDebuggingStopped();
exceptionHistory.Clear();
//DebuggerService.Stop();//TODO: delete
}
@@ -287,9 +411,8 @@ namespace ICSharpCode.SharpDevelop.Services
}
}
- protected override void OnIsProcessRunningChanged()
+ public void DebuggerStateChanged(object sender, DebuggerEventArgs e)
{
- base.OnIsProcessRunningChanged();
UpdateToolbars();
}
@@ -306,8 +429,8 @@ namespace ICSharpCode.SharpDevelop.Services
///
public string GetValueAsString(string variableName)
{
- if (!IsDebugging || IsProcessRunning) return null;
- VariableCollection collection = LocalVariables;
+ if (!debugger.IsDebugging || debugger.IsProcessRunning) return null;
+ VariableCollection collection = debugger.LocalVariables;
if (collection == null)
return null;
foreach (Variable v in collection) {
@@ -323,5 +446,5 @@ namespace ICSharpCode.SharpDevelop.Services
}
return null;
}
- }
+ }
}
diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/NDebugger.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/NDebugger.cs
index 277379842a..66d06a878f 100644
--- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/NDebugger.cs
+++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/NDebugger.cs
@@ -13,7 +13,7 @@ using DebuggerInterop.MetaData;
namespace DebuggerLibrary
{
- public partial class NDebugger
+ public partial class NDebugger: MarshalByRefObject
{
ICorDebug corDebug;
ManagedCallback managedCallback;
diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/InvokeOnSTASink/InvokeOnSTAClientChannelSink.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/InvokeOnSTASink/InvokeOnSTAClientChannelSink.cs
index 5065312e6a..a86b27b4d3 100644
--- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/InvokeOnSTASink/InvokeOnSTAClientChannelSink.cs
+++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/InvokeOnSTASink/InvokeOnSTAClientChannelSink.cs
@@ -63,13 +63,17 @@ namespace CustomSinks
IMessage IMessageSink.SyncProcessMessage(IMessage msg)
{
IMessage response = null;
- Thread thread = new Thread(new ThreadStart(delegate {
+ //Thread thread = new Thread(new ThreadStart(delegate {
response = nextSink.SyncProcessMessage(msg);
- }));
+ //}));
- thread.Start();
+ //thread.Start();
+ //thread.Join();
- while (thread.IsAlive) Application.DoEvents();
+ ThreadPriority oldPriority = Thread.CurrentThread.Priority;
+ Thread.CurrentThread.Priority = ThreadPriority.BelowNormal;
+ //while (thread.IsAlive) Application.DoEvents();
+ Thread.CurrentThread.Priority = oldPriority;
return response;
}
diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/PrivateEventHandlersSink/EventForwarder.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/PrivateEventHandlersSink/EventForwarder.cs
index a826950b08..b01143c9ed 100644
--- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/PrivateEventHandlersSink/EventForwarder.cs
+++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/PrivateEventHandlersSink/EventForwarder.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Text;
+using System.Windows.Forms;
namespace CustomSinks
{
@@ -13,59 +14,73 @@ namespace CustomSinks
this.realEvent = realEvent;
}
+ void DynamicInvoke(params object[] par)
+ {
+ // TODO: Walkaround - custom sinks do not work properly in same Process - they are ignored
+ if (Application.OpenForms.Count > 0) {
+ Application.OpenForms[0].Invoke(new EventHandler(delegate
+ {
+ realEvent.DynamicInvoke(par);
+ }));
+ } else {
+ realEvent.DynamicInvoke(par);
+ }
+ //realEvent.DynamicInvoke(par);
+ }
+
public void ForwardEvent0()
{
- realEvent.DynamicInvoke(new object[] {});
+ DynamicInvoke(new object[] {});
}
public void ForwardEvent1(object p1)
{
- realEvent.DynamicInvoke(new object[] { p1});
+ DynamicInvoke(new object[] { p1});
}
public void ForwardEvent2(object p1, object p2)
{
- realEvent.DynamicInvoke(new object[] { p1, p2});
+ DynamicInvoke(new object[] { p1, p2});
}
public void ForwardEvent3(object p1, object p2, object p3)
{
- realEvent.DynamicInvoke(new object[] { p1, p2, p3});
+ DynamicInvoke(new object[] { p1, p2, p3});
}
public void ForwardEvent4(object p1, object p2, object p3, object p4)
{
- realEvent.DynamicInvoke(new object[] { p1, p2, p3, p4});
+ DynamicInvoke(new object[] { p1, p2, p3, p4});
}
public void ForwardEvent5(object p1, object p2, object p3, object p4, object p5)
{
- realEvent.DynamicInvoke(new object[] { p1, p2, p3, p4, p5});
+ DynamicInvoke(new object[] { p1, p2, p3, p4, p5});
}
public void ForwardEvent6(object p1, object p2, object p3, object p4, object p5, object p6)
{
- realEvent.DynamicInvoke(new object[] { p1, p2, p3, p4, p5, p6});
+ DynamicInvoke(new object[] { p1, p2, p3, p4, p5, p6});
}
public void ForwardEvent7(object p1, object p2, object p3, object p4, object p5, object p6, object p7)
{
- realEvent.DynamicInvoke(new object[] { p1, p2, p3, p4, p5, p6, p7});
+ DynamicInvoke(new object[] { p1, p2, p3, p4, p5, p6, p7});
}
public void ForwardEvent8(object p1, object p2, object p3, object p4, object p5, object p6, object p7, object p8)
{
- realEvent.DynamicInvoke(new object[] { p1, p2, p3, p4, p5, p6, p7, p8});
+ DynamicInvoke(new object[] { p1, p2, p3, p4, p5, p6, p7, p8});
}
public void ForwardEvent9(object p1, object p2, object p3, object p4, object p5, object p6, object p7, object p8, object p9)
{
- realEvent.DynamicInvoke(new object[] { p1, p2, p3, p4, p5, p6, p7, p8, p9});
+ DynamicInvoke(new object[] { p1, p2, p3, p4, p5, p6, p7, p8, p9});
}
public void ForwardEvent10(object p1, object p2, object p3, object p4, object p5, object p6, object p7, object p8, object p9, object p10)
{
- realEvent.DynamicInvoke(new object[] { p1, p2, p3, p4, p5, p6, p7, p8, p9, p10});
+ DynamicInvoke(new object[] { p1, p2, p3, p4, p5, p6, p7, p8, p9, p10});
}
}
}
diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/PrivateEventHandlersSink/PrivateEventHandlersClientChannelSink.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/PrivateEventHandlersSink/PrivateEventHandlersClientChannelSink.cs
index 28c16d96ea..fd758a1311 100644
--- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/PrivateEventHandlersSink/PrivateEventHandlersClientChannelSink.cs
+++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/PrivateEventHandlersSink/PrivateEventHandlersClientChannelSink.cs
@@ -63,6 +63,7 @@ namespace CustomSinks
IMessage IMessageSink.SyncProcessMessage(IMessage msg)
{
+ Console.WriteLine("Remoting message:" + msg.Properties["__MethodName"].ToString());
MethodCall methodCall = new MethodCall(msg);
if (methodCall.ArgCount > 0 && methodCall.Args[0] is Delegate) {
Delegate realDelegate = methodCall.Args[0] as Delegate;
diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/PrivateEventHandlersSink/PrivateEventHandlersSink.csproj b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/PrivateEventHandlersSink/PrivateEventHandlersSink.csproj
index ec828bf252..f4d0c10731 100644
--- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/PrivateEventHandlersSink/PrivateEventHandlersSink.csproj
+++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/PrivateEventHandlersSink/PrivateEventHandlersSink.csproj
@@ -19,6 +19,7 @@
+
@@ -28,4 +29,4 @@
-
\ No newline at end of file
+