From 30b2d5491648cd9040f084b892f5c916b36a0081 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Srbeck=C3=BD?= Date: Sat, 16 Jul 2005 21:06:57 +0000 Subject: [PATCH] Debugger lazy loading git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@192 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Project/Src/Pads/BreakPointsPad.cs | 20 +++++++--- .../Project/Src/Pads/CallStackPad.cs | 18 ++++++--- .../Project/Src/Pads/ExceptionHistoryPad.cs | 16 ++++++-- .../Project/Src/Pads/LoadedModulesPad.cs | 18 +++++++-- .../Project/Src/Pads/LocalVarPad.cs | 17 +++++++- .../Project/Src/Pads/RunningThreadsPad.cs | 23 +++++++---- .../Project/Src/Service/WindowsDebugger.cs | 39 ++++++++++++------- 7 files changed, 109 insertions(+), 42 deletions(-) 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 273021720a..4ce7f688fa 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 @@ -44,7 +44,10 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads void InitializeComponents() { debugger = (WindowsDebugger)DebuggerService.CurrentDebugger; - debuggerCore = debugger.DebuggerCore; + + debugger.Initialize += delegate { + InitializeDebugger(); + }; breakpointsList = new ListView(); breakpointsList.FullRowSelect = true; @@ -61,21 +64,26 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads name.Width = 300; path.Width = 400; + RedrawContent(); + } + + public void InitializeDebugger() + { + debuggerCore = debugger.DebuggerCore; + 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(); + + RefreshList(); } public override void RedrawContent() { name.Text = "Name"; path.Text = "Path"; - - FillList(); } void BreakpointsListItemCheck(object sender, ItemCheckEventArgs e) @@ -89,7 +97,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads } } - void FillList() + void RefreshList() { breakpointsList.ItemCheck -= new ItemCheckEventHandler(BreakpointsListItemCheck); breakpointsList.BeginUpdate(); 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 3804cfdfdc..5eeb463efd 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 @@ -44,7 +44,10 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads void InitializeComponents() { debugger = (WindowsDebugger)DebuggerService.CurrentDebugger; - debuggerCore = debugger.DebuggerCore; + + debugger.Initialize += delegate { + InitializeDebugger(); + }; callStackList = new ListView(); callStackList.FullRowSelect = true; @@ -58,19 +61,24 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads callStackList.ItemActivate += new EventHandler(CallStackListItemActivate); name.Width = 300; language.Width = 400; - + + RedrawContent(); + } + + public void InitializeDebugger() + { + debuggerCore = debugger.DebuggerCore; + debuggerCore.IsDebuggingChanged += new DebuggerEventHandler(DebuggerStateChanged); debuggerCore.IsProcessRunningChanged += new DebuggerEventHandler(DebuggerStateChanged); - RedrawContent(); + RefreshList(); } public override void RedrawContent() { name.Text = "Name"; language.Text = "Language"; - - RefreshList(); } void CallStackListItemActivate(object sender, EventArgs e) 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 120e26727e..4166e696a8 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 @@ -45,8 +45,11 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads void InitializeComponents() { debugger = (WindowsDebugger)DebuggerService.CurrentDebugger; - debuggerCore = debugger.DebuggerCore; + debugger.Initialize += delegate { + InitializeDebugger(); + }; + exceptionHistoryList = new ListView(); exceptionHistoryList.FullRowSelect = true; exceptionHistoryList.AutoArrange = true; @@ -61,10 +64,17 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads location.Width = 400; time.Width = 80; + RedrawContent(); + } + + public void InitializeDebugger() + { + debuggerCore = debugger.DebuggerCore; + debuggerCore.IsDebuggingChanged += new DebuggerEventHandler(DebuggerStateChanged); debuggerCore.IsProcessRunningChanged += new DebuggerEventHandler(DebuggerStateChanged); - RedrawContent(); + RefreshList(); } public override void RedrawContent() @@ -72,8 +82,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads time.Text = "Time"; exception.Text = "Exception"; location.Text = "Location"; - - RefreshList(); } void ExceptionHistoryListItemActivate(object sender, EventArgs e) 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 35352d6738..85a89c3709 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 @@ -50,8 +50,11 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads void InitializeComponents() { debugger = (WindowsDebugger)DebuggerService.CurrentDebugger; - debuggerCore = debugger.DebuggerCore; + debugger.Initialize += delegate { + InitializeDebugger(); + }; + loadedModulesList = new ListView(); loadedModulesList.FullRowSelect = true; loadedModulesList.AutoArrange = true; @@ -70,15 +73,21 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads timestamp.Width = 0;//80; information.Width = 130; + RedrawContent(); + } + + public void InitializeDebugger() + { + debuggerCore = debugger.DebuggerCore; + debuggerCore.ModuleLoaded += new DebuggerLibrary.ModuleEventHandler(AddModule); debuggerCore.ModuleUnloaded += new DebuggerLibrary.ModuleEventHandler(RemoveModule); - RedrawContent(); + RefreshList(); } public override void RedrawContent() { - name.Text = StringParser.Parse("${res:MainWindow.Windows.Debug.NameColumn}"); address.Text = StringParser.Parse("${res:MainWindow.Windows.Debug.AddressColumn}"); path.Text = StringParser.Parse("${res:MainWindow.Windows.Debug.PathColumn}"); @@ -87,7 +96,10 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads program.Text = StringParser.Parse("${res:MainWindow.Windows.Debug.ProgramColumn}"); timestamp.Text = StringParser.Parse("${res:MainWindow.Windows.Debug.TimestampColumn}"); information.Text = StringParser.Parse("${res:MainWindow.Windows.Debug.InformationColumn}"); + } + void RefreshList() + { loadedModulesList.Items.Clear(); 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 00a17a572e..f80dbb67fe 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 @@ -45,8 +45,11 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads void InitializeComponents() { debugger = (WindowsDebugger)DebuggerService.CurrentDebugger; - debuggerCore = debugger.DebuggerCore; + debugger.Initialize += delegate { + InitializeDebugger(); + }; + ImageList imageList = new ImageList(); imageList.Images.Add(IconService.GetBitmap("Icons.16x16.Class")); imageList.Images.Add(IconService.GetBitmap("Icons.16x16.Field")); @@ -68,9 +71,16 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads localVarList.SizeChanged += new EventHandler(localVarList_SizeChanged); localVarList.BeforeExpand += new TreeListViewCancelEventHandler(localVarList_BeforeExpand); + RedrawContent(); + } + + public void InitializeDebugger() + { + debuggerCore = debugger.DebuggerCore; + debuggerCore.DebuggingPaused += new DebuggingPausedEventHandler(debuggerService_OnDebuggingPaused); - RedrawContent(); + RefreshList(); } // This is a walkarond for a visual issue @@ -84,7 +94,10 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads name.Text = "Name"; val.Text = "Value"; type.Text = "Type"; + } + void RefreshList() + { if (debugger.IsDebugging && debugger.IsProcessRunning == false) { debuggerService_OnDebuggingPaused(this, new DebuggingPausedEventArgs(PausedReason.StepComplete)); } 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 784471c949..6d049abf1d 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 @@ -47,8 +47,11 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads void InitializeComponents() { debugger = (WindowsDebugger)DebuggerService.CurrentDebugger; - debuggerCore = debugger.DebuggerCore; + debugger.Initialize += delegate { + InitializeDebugger(); + }; + runningThreadsList = new ListView(); runningThreadsList.FullRowSelect = true; runningThreadsList.AutoArrange = true; @@ -64,14 +67,20 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads location.Width = 250; priority.Width = 120; breaked.Width = 80; - + RedrawContent(); + } + + public void InitializeDebugger() + { + debuggerCore = debugger.DebuggerCore; + debuggerCore.ThreadStarted += new ThreadEventHandler(AddThread); debuggerCore.ThreadStateChanged += new ThreadEventHandler(RefreshThread); debuggerCore.ThreadExited += new ThreadEventHandler(RemoveThread); debuggerCore.IsProcessRunningChanged += new DebuggerEventHandler(DebuggerStateChanged); - - RedrawContent(); + + RefreshList(); } public override void RedrawContent() @@ -81,8 +90,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads location.Text = "Location"; priority.Text = "Priority"; breaked.Text = "Breaked"; - - RefreshAllItems(); } void RunningThreadsListItemActivate(object sender, EventArgs e) @@ -131,10 +138,10 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads public void DebuggerStateChanged(object sender, DebuggerEventArgs e) { - RefreshAllItems(); + RefreshList(); } - private void RefreshAllItems() + private void RefreshList() { 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 ed96e6856a..b70e199fc9 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 @@ -37,7 +37,7 @@ using System.Security.Policy; namespace ICSharpCode.SharpDevelop.Services { - public class WindowsDebugger:IDebugger //, IService + public class WindowsDebugger:IDebugger//, IService { [Serializable] public class RemotingConfigurationHelpper @@ -87,8 +87,9 @@ namespace ICSharpCode.SharpDevelop.Services bool useRemotingForThreadInterop = false; NDebugger debugger; - bool isDebuggingCache; - bool isProcessRunningCache; + bool isDebuggingCache = false; + bool isProcessRunningCache = false; + bool serviceInitialized = false; public event EventHandler DebugStopped; // FIX: unused @@ -135,6 +136,16 @@ namespace ICSharpCode.SharpDevelop.Services } public WindowsDebugger() + { + + } + + #region ICSharpCode.Core.Services.IService interface implementation + public event System.EventHandler Initialize; + + public event System.EventHandler Unload; + + public void InitializeService() { if (useRemotingForThreadInterop) { // This needs to be called before instance of NDebugger is created @@ -155,16 +166,6 @@ namespace ICSharpCode.SharpDevelop.Services debugger = new NDebugger(); - InitializeService(); - } - - #region ICSharpCode.Core.Services.IService interface implementation - public event System.EventHandler Initialize; - - public event System.EventHandler Unload; - - public void InitializeService() - { debugger.DebuggerTraceMessage += new MessageEventHandler(DebuggerTraceMessage); debugger.LogMessage += new MessageEventHandler(LogMessage); debugger.DebuggingStarted += new DebuggerEventHandler(DebuggingStarted); @@ -179,12 +180,16 @@ namespace ICSharpCode.SharpDevelop.Services DebuggerService.BreakPointRemoved += new EventHandler(RestoreNDebuggerBreakpoints); DebuggerService.BreakPointChanged += new EventHandler(RestoreNDebuggerBreakpoints); + RestoreNDebuggerBreakpoints(this, EventArgs.Empty); + isDebuggingCache = debugger.IsDebugging; isProcessRunningCache = debugger.IsProcessRunning; if (Initialize != null) { Initialize(this, null); } + + serviceInitialized = true; } public void UnloadService() @@ -236,11 +241,17 @@ namespace ICSharpCode.SharpDevelop.Services public void StartWithoutDebugging(System.Diagnostics.ProcessStartInfo psi) { - debugger.StartWithoutDebugging(psi); + System.Diagnostics.Process process; + process = new System.Diagnostics.Process(); + process.StartInfo = psi; + process.Start(); } public void Start(string fileName, string workingDirectory, string arguments) { + if (!serviceInitialized) { + InitializeService(); + } debugger.Start(fileName, workingDirectory, arguments); }