From 5d69e1012eeddda4bdb00ec46d1f83d730df98ae Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Thu, 3 Jul 2008 19:56:47 +0000 Subject: [PATCH] Attach to process dialog now can show or hide non-managed processes. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@3165 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- data/resources/StringResources.nl.resources | Bin 309082 -> 309275 bytes .../Project/Debugger.AddIn.csproj | 1 + .../Src/Service/AttachToProcessForm.cs | 78 ++++++++++++ .../Project/Src/Service/WindowsDebugger.cs | 24 ++++ .../Project/Debugger.Core.csproj | 12 ++ .../CorPub/Autogenerated/CorPublishClass.cs | 60 +++++++++ .../CorPub/Autogenerated/CorpubPublish.cs | 23 ++++ .../CorPub/Autogenerated/ICorPublish.cs | 31 +++++ .../Autogenerated/ICorPublishAppDomain.cs | 27 ++++ .../Autogenerated/ICorPublishAppDomainEnum.cs | 35 +++++ .../CorPub/Autogenerated/ICorPublishEnum.cs | 30 +++++ .../Autogenerated/ICorPublishProcess.cs | 31 +++++ .../Autogenerated/ICorPublishProcessEnum.cs | 32 +++++ .../Src/Wrappers/CorPub/ICorPublish.cs | 34 +++++ .../Src/Wrappers/CorPub/ICorPublishProcess.cs | 68 ++++++++++ .../Project/ICSharpCode.SharpDevelop.csproj | 9 +- .../Project/Src/Commands/DebugCommands.cs | 6 +- ...> AbstractAttachToProcessForm.Designer.cs} | 38 +++++- ...Form.cs => AbstractAttachToProcessForm.cs} | 43 +++---- .../Src/Gui/Dialogs/AttachToProcessForm.resx | 120 ------------------ .../Src/Services/Debugger/DefaultDebugger.cs | 4 + .../Src/Services/Debugger/IDebugger.cs | 10 +- .../Resources/StringResources.resources | Bin 301221 -> 301211 bytes 23 files changed, 553 insertions(+), 163 deletions(-) create mode 100644 src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/AttachToProcessForm.cs create mode 100644 src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/CorPub/Autogenerated/CorPublishClass.cs create mode 100644 src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/CorPub/Autogenerated/CorpubPublish.cs create mode 100644 src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/CorPub/Autogenerated/ICorPublish.cs create mode 100644 src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/CorPub/Autogenerated/ICorPublishAppDomain.cs create mode 100644 src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/CorPub/Autogenerated/ICorPublishAppDomainEnum.cs create mode 100644 src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/CorPub/Autogenerated/ICorPublishEnum.cs create mode 100644 src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/CorPub/Autogenerated/ICorPublishProcess.cs create mode 100644 src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/CorPub/Autogenerated/ICorPublishProcessEnum.cs create mode 100644 src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/CorPub/ICorPublish.cs create mode 100644 src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/CorPub/ICorPublishProcess.cs rename src/Main/Base/Project/Src/Gui/Dialogs/{AttachToProcessForm.Designer.cs => AbstractAttachToProcessForm.Designer.cs} (76%) rename src/Main/Base/Project/Src/Gui/Dialogs/{AttachToProcessForm.cs => AbstractAttachToProcessForm.cs} (72%) delete mode 100644 src/Main/Base/Project/Src/Gui/Dialogs/AttachToProcessForm.resx diff --git a/data/resources/StringResources.nl.resources b/data/resources/StringResources.nl.resources index 8a2d5dfcf98227156a4329ee064dcf3bd7dd7f1c..9e4b4671331b0fbcb8ff0d692b9eab7e9d046aeb 100644 GIT binary patch delta 35807 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 G5C0!Y4-9w! delta 35675 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 km(z%j-k_ + Form diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/AttachToProcessForm.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/AttachToProcessForm.cs new file mode 100644 index 0000000000..b083acd500 --- /dev/null +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/AttachToProcessForm.cs @@ -0,0 +1,78 @@ +// +// +// +// $Revision$ +// + +using System; +using System.ComponentModel; +using System.Diagnostics; +using System.IO; +using System.Windows.Forms; +using ICSharpCode.Core; +using ICSharpCode.SharpDevelop.Debugging; +using ICSharpCode.SharpDevelop.Gui; + +namespace ICSharpCode.SharpDevelop.Services +{ + public class AttachToProcessForm : AbstractAttachToProcessForm + { + class ProcessListViewItem : ListViewItem + { + Process process; + bool managed; + + public ProcessListViewItem(Process process, WindowsDebugger debugger) + { + this.process = process; + try { + managed = debugger.IsManaged(process.Id); + } catch { } + + string fileName = Path.GetFileName(process.MainModule.FileName); + Text = fileName; + SubItems.Add(process.Id.ToString()); + SubItems.Add(process.MainWindowTitle); + SubItems.Add(GetManagedString(managed)); + } + + public Process Process { + get { return process; } + } + + public bool IsManaged { + get { return managed; } + } + + static string GetManagedString(bool managed) + { + if (managed) { + return StringParser.Parse("${res:ICSharpCode.SharpDevelop.Gui.Dialogs.AttachToProcessForm.Managed}"); + } + return String.Empty; + } + } + + protected override void RefreshProcessList(ListView listView, bool showNonManaged) + { + listView.Items.Clear(); + WindowsDebugger debugger = (WindowsDebugger)DebuggerService.CurrentDebugger; + Process currentProcess = Process.GetCurrentProcess(); + foreach (System.Diagnostics.Process process in System.Diagnostics.Process.GetProcesses()) { + try { + // Prevent attaching to our own process. + if (currentProcess.Id != process.Id) { + ProcessListViewItem item = new ProcessListViewItem(process, debugger); + if (showNonManaged || item.IsManaged) { + item.Tag = process; + listView.Items.Add(item); + } + } + } catch (Win32Exception) { + // Do nothing. + } + } + listView.Sort(); + } + } +} 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 71395ae354..c4a5c35e71 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 @@ -46,6 +46,7 @@ using Bitmap = System.Drawing.Bitmap; using Debugger; using Debugger.Expressions; using Debugger.AddIn.TreeModel; +using Debugger.Core.Wrappers.CorPub; using ICSharpCode.Core; using ICSharpCode.SharpDevelop.Gui; using ICSharpCode.SharpDevelop.Project; @@ -60,6 +61,8 @@ namespace ICSharpCode.SharpDevelop.Services NDebugger debugger; + ICorPublish corPublish; + Debugger.Process debuggedProcess; DynamicTreeDebuggerRow currentTooltipRow; @@ -152,6 +155,15 @@ namespace ICSharpCode.SharpDevelop.Services } } + public void ShowAttachDialog() + { + using (AttachToProcessForm attachForm = new AttachToProcessForm()) { + if (attachForm.ShowDialog() == DialogResult.OK) { + Attach(attachForm.Process); + } + } + } + public void Attach(System.Diagnostics.Process existingProcess) { if (IsDebugging) { @@ -292,6 +304,18 @@ namespace ICSharpCode.SharpDevelop.Services } } + public bool IsManaged(int processId) + { + if (corPublish == null) { + corPublish = new ICorPublish(); + } + + ICorPublishProcess process = corPublish.GetProcess(processId); + if (process != null) { + return process.IsManaged; + } + return false; + } /// /// Gets the current value of the variable as string that can be displayed in tooltips. diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Debugger.Core.csproj b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Debugger.Core.csproj index cfc3d53c84..ca9150ac90 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Debugger.Core.csproj +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Debugger.Core.csproj @@ -324,6 +324,16 @@ + + + + + + + + + + @@ -390,9 +400,11 @@ + + \ No newline at end of file diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/CorPub/Autogenerated/CorPublishClass.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/CorPub/Autogenerated/CorPublishClass.cs new file mode 100644 index 0000000000..faed26729f --- /dev/null +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/CorPub/Autogenerated/CorPublishClass.cs @@ -0,0 +1,60 @@ +// +// +// +// +// $Revision$ +// + +#pragma warning disable 108, 1591 + +namespace Debugger.Interop.CorPub +{ + using System; + using System.Runtime.CompilerServices; + using System.Runtime.InteropServices; + using System.Text; + + [ComImport, TypeLibType((short) 2), ClassInterface((short) 0), Guid("047A9A40-657E-11D3-8D5B-00104B35E7EF")] + public class CorpubPublishClass : ICorPublish, CorpubPublish, ICorPublishProcess, ICorPublishAppDomain, ICorPublishProcessEnum, ICorPublishAppDomainEnum + { + // Methods + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + public virtual extern void Clone([MarshalAs(UnmanagedType.Interface)] out ICorPublishEnum ppEnum); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + public virtual extern void EnumAppDomains([MarshalAs(UnmanagedType.Interface)] out ICorPublishAppDomainEnum ppEnum); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + public virtual extern void EnumProcesses([In, ComAliasName("CorpubProcessLib.COR_PUB_ENUMPROCESS")] COR_PUB_ENUMPROCESS Type, [MarshalAs(UnmanagedType.Interface)] out ICorPublishProcessEnum ppIEnum); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + public virtual extern void GetCount(out uint pcelt); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + public virtual extern void GetDisplayName([In] uint cchName, out uint pcchName, [Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder szName); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + public virtual extern void GetID(out uint puId); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + public virtual extern void GetName([In] uint cchName, out uint pcchName, [Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder szName); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + public virtual extern void GetProcess([In] uint pid, [MarshalAs(UnmanagedType.Interface)] out ICorPublishProcess ppProcess); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + public virtual extern void GetProcessID(out uint pid); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + public virtual extern void ICorPublishAppDomainEnum_Clone([MarshalAs(UnmanagedType.Interface)] out ICorPublishEnum ppEnum); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + public virtual extern void ICorPublishAppDomainEnum_GetCount(out uint pcelt); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + public virtual extern void ICorPublishAppDomainEnum_Reset(); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + public virtual extern void ICorPublishAppDomainEnum_Skip([In] uint celt); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + public virtual extern void IsManaged(out int pbManaged); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + public virtual extern void Next([In] uint celt, [MarshalAs(UnmanagedType.Interface)] out ICorPublishAppDomain objects, out uint pceltFetched); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + public virtual extern void Next([In] uint celt, [MarshalAs(UnmanagedType.Interface)] out ICorPublishProcess objects, out uint pceltFetched); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + public virtual extern void Reset(); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + public virtual extern void Skip([In] uint celt); + } +} + +#pragma warning restore 108, 1591 \ No newline at end of file diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/CorPub/Autogenerated/CorpubPublish.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/CorPub/Autogenerated/CorpubPublish.cs new file mode 100644 index 0000000000..245cb91d28 --- /dev/null +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/CorPub/Autogenerated/CorpubPublish.cs @@ -0,0 +1,23 @@ +// +// +// +// +// $Revision$ +// + +#pragma warning disable 108, 1591 + +namespace Debugger.Interop.CorPub +{ + using System; + using System.Runtime.CompilerServices; + using System.Runtime.InteropServices; + + [ComImport, CoClass(typeof(CorpubPublishClass)), Guid("9613A0E7-5A68-11D3-8F84-00A0C9B4D50C")] + public interface CorpubPublish : ICorPublish + { + } +} + +#pragma warning restore 108, 1591 + diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/CorPub/Autogenerated/ICorPublish.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/CorPub/Autogenerated/ICorPublish.cs new file mode 100644 index 0000000000..4aa6d130ea --- /dev/null +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/CorPub/Autogenerated/ICorPublish.cs @@ -0,0 +1,31 @@ +// +// +// +// +// $Revision$ +// + +#pragma warning disable 108, 1591 + +namespace Debugger.Interop.CorPub +{ + using System; + using System.Runtime.CompilerServices; + using System.Runtime.InteropServices; + + public enum COR_PUB_ENUMPROCESS + { + COR_PUB_MANAGEDONLY = 1 + } + + [ComImport, Guid("9613A0E7-5A68-11D3-8F84-00A0C9B4D50C"), InterfaceType((short) 1)] + public interface ICorPublish + { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void EnumProcesses([In, ComAliasName("CorpubProcessLib.COR_PUB_ENUMPROCESS")] COR_PUB_ENUMPROCESS Type, [MarshalAs(UnmanagedType.Interface)] out ICorPublishProcessEnum ppIEnum); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void GetProcess([In] uint pid, [MarshalAs(UnmanagedType.Interface)] out ICorPublishProcess ppProcess); + } +} + +#pragma warning restore 108, 1591 \ No newline at end of file diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/CorPub/Autogenerated/ICorPublishAppDomain.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/CorPub/Autogenerated/ICorPublishAppDomain.cs new file mode 100644 index 0000000000..8705584de4 --- /dev/null +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/CorPub/Autogenerated/ICorPublishAppDomain.cs @@ -0,0 +1,27 @@ +// +// +// +// +// $Revision$ +// + +#pragma warning disable 108, 1591 + +namespace Debugger.Interop.CorPub +{ + using System; + using System.Runtime.CompilerServices; + using System.Runtime.InteropServices; + using System.Text; + + [ComImport, Guid("D6315C8F-5A6A-11D3-8F84-00A0C9B4D50C"), InterfaceType((short) 1)] + public interface ICorPublishAppDomain + { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void GetID(out uint puId); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void GetName([In] uint cchName, out uint pcchName, [Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder szName); + } +} + +#pragma warning restore 108, 1591 \ No newline at end of file diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/CorPub/Autogenerated/ICorPublishAppDomainEnum.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/CorPub/Autogenerated/ICorPublishAppDomainEnum.cs new file mode 100644 index 0000000000..4ed89845f7 --- /dev/null +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/CorPub/Autogenerated/ICorPublishAppDomainEnum.cs @@ -0,0 +1,35 @@ +// +// +// +// +// $Revision$ +// + +#pragma warning disable 108, 1591 + +namespace Debugger.Interop.CorPub +{ + using System; + using System.Runtime.CompilerServices; + using System.Runtime.InteropServices; + + [ComImport, Guid("9F0C98F5-5A6A-11D3-8F84-00A0C9B4D50C"), InterfaceType((short) 1),] + public interface ICorPublishAppDomainEnum : ICorPublishEnum + { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void Skip([In] uint celt); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void Reset(); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void Clone([MarshalAs(UnmanagedType.Interface)] out ICorPublishEnum ppEnum); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void GetCount(out uint pcelt); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void Next([In] uint celt, [MarshalAs(UnmanagedType.Interface)] out ICorPublishAppDomain objects, out uint pceltFetched); + } +} + +#pragma warning restore 108, 1591 + + + diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/CorPub/Autogenerated/ICorPublishEnum.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/CorPub/Autogenerated/ICorPublishEnum.cs new file mode 100644 index 0000000000..6fe2c0fa57 --- /dev/null +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/CorPub/Autogenerated/ICorPublishEnum.cs @@ -0,0 +1,30 @@ +// +// +// +// +// $Revision$ +// + +#pragma warning disable 108, 1591 + +namespace Debugger.Interop.CorPub +{ + using System; + using System.Runtime.CompilerServices; + using System.Runtime.InteropServices; + + [ComImport, Guid("C0B22967-5A69-11D3-8F84-00A0C9B4D50C"), InterfaceType((short) 1)] + public interface ICorPublishEnum + { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void Skip([In] uint celt); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void Reset(); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void Clone([MarshalAs(UnmanagedType.Interface)] out ICorPublishEnum ppEnum); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void GetCount(out uint pcelt); + } +} + +#pragma warning restore 108, 1591 diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/CorPub/Autogenerated/ICorPublishProcess.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/CorPub/Autogenerated/ICorPublishProcess.cs new file mode 100644 index 0000000000..426c36496b --- /dev/null +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/CorPub/Autogenerated/ICorPublishProcess.cs @@ -0,0 +1,31 @@ +// +// +// +// +// $Revision$ +// + +#pragma warning disable 108, 1591 + +namespace Debugger.Interop.CorPub +{ + using System; + using System.Runtime.CompilerServices; + using System.Runtime.InteropServices; + using System.Text; + + [ComImport, Guid("18D87AF1-5A6A-11D3-8F84-00A0C9B4D50C"), InterfaceType((short) 1)] + public interface ICorPublishProcess + { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void IsManaged(out int pbManaged); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void EnumAppDomains([MarshalAs(UnmanagedType.Interface)] out ICorPublishAppDomainEnum ppEnum); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void GetProcessID(out uint pid); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void GetDisplayName([In] uint cchName, out uint pcchName, [Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder szName); + } +} + +#pragma warning restore 108, 1591 \ No newline at end of file diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/CorPub/Autogenerated/ICorPublishProcessEnum.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/CorPub/Autogenerated/ICorPublishProcessEnum.cs new file mode 100644 index 0000000000..9b6390291c --- /dev/null +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/CorPub/Autogenerated/ICorPublishProcessEnum.cs @@ -0,0 +1,32 @@ +// +// +// +// +// $Revision$ +// + +#pragma warning disable 108, 1591 + +namespace Debugger.Interop.CorPub +{ + using System; + using System.Runtime.CompilerServices; + using System.Runtime.InteropServices; + + [ComImport, Guid("A37FBD41-5A69-11D3-8F84-00A0C9B4D50C"), InterfaceType((short) 1)] + public interface ICorPublishProcessEnum : ICorPublishEnum + { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void Skip([In] uint celt); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void Reset(); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void Clone([MarshalAs(UnmanagedType.Interface)] out ICorPublishEnum ppEnum); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void GetCount(out uint pcelt); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void Next([In] uint celt, [MarshalAs(UnmanagedType.Interface)] out ICorPublishProcess objects, out uint pceltFetched); + } +} + +#pragma warning restore 108, 1591 \ No newline at end of file diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/CorPub/ICorPublish.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/CorPub/ICorPublish.cs new file mode 100644 index 0000000000..831bed18ae --- /dev/null +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/CorPub/ICorPublish.cs @@ -0,0 +1,34 @@ +// +// +// +// +// $Revision$ +// + +#pragma warning disable 1591 + +namespace Debugger.Core.Wrappers.CorPub +{ + using System; + using System.Runtime.InteropServices; + using Debugger.Wrappers; + + public partial class ICorPublish + { + private Debugger.Interop.CorPub.CorpubPublishClass corpubPublishClass; + + public ICorPublish() + { + corpubPublishClass = new Debugger.Interop.CorPub.CorpubPublishClass(); + } + + public ICorPublishProcess GetProcess(int id) + { + Debugger.Interop.CorPub.ICorPublishProcess process; + this.corpubPublishClass.GetProcess((uint)id, out process); + return ICorPublishProcess.Wrap(process); + } + } +} + +#pragma warning restore 1591 diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/CorPub/ICorPublishProcess.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/CorPub/ICorPublishProcess.cs new file mode 100644 index 0000000000..3fb2d6f7d3 --- /dev/null +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/CorPub/ICorPublishProcess.cs @@ -0,0 +1,68 @@ +// +// +// +// +// $Revision$ +// + +#pragma warning disable 1591 + +namespace Debugger.Core.Wrappers.CorPub +{ + using System; + using System.Runtime.InteropServices; + using System.Text; + using Debugger.Wrappers; + + public partial class ICorPublishProcess + { + private Debugger.Interop.CorPub.ICorPublishProcess wrappedObject; + + internal Debugger.Interop.CorPub.ICorPublishProcess WrappedObject + { + get + { + return this.wrappedObject; + } + } + + public ICorPublishProcess(Debugger.Interop.CorPub.ICorPublishProcess wrappedObject) + { + this.wrappedObject = wrappedObject; + ResourceManager.TrackCOMObject(wrappedObject, typeof(ICorPublishProcess)); + } + + public static ICorPublishProcess Wrap(Debugger.Interop.CorPub.ICorPublishProcess objectToWrap) + { + if ((objectToWrap != null)) + { + return new ICorPublishProcess(objectToWrap); + } else + { + return null; + } + } + + public int ProcessId + { + get + { + uint id; + wrappedObject.GetProcessID(out id); + return (int)id; + } + } + + public bool IsManaged + { + get + { + int managed; + wrappedObject.IsManaged(out managed); + return managed != 0; + } + } + } +} + +#pragma warning restore 1591 diff --git a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj index 3109da9785..10f2f8f5b8 100644 --- a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj +++ b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj @@ -67,9 +67,9 @@ AsynchronousWaitDialog.cs - - - AttachToProcessForm.cs + + + AbstractAttachToProcessForm.cs @@ -715,9 +715,6 @@ - - AttachToProcessForm.cs - ExtractInterfaceDialog.cs diff --git a/src/Main/Base/Project/Src/Commands/DebugCommands.cs b/src/Main/Base/Project/Src/Commands/DebugCommands.cs index 4d1747e0d7..6f0aa2d3be 100644 --- a/src/Main/Base/Project/Src/Commands/DebugCommands.cs +++ b/src/Main/Base/Project/Src/Commands/DebugCommands.cs @@ -118,11 +118,7 @@ namespace ICSharpCode.SharpDevelop.Project.Commands { public override void Run() { - using (AttachToProcessForm attachForm = new AttachToProcessForm()) { - if (attachForm.ShowDialog() == DialogResult.OK) { - DebuggerService.CurrentDebugger.Attach(attachForm.Process); - } - } + DebuggerService.CurrentDebugger.ShowAttachDialog(); } } diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/AttachToProcessForm.Designer.cs b/src/Main/Base/Project/Src/Gui/Dialogs/AbstractAttachToProcessForm.Designer.cs similarity index 76% rename from src/Main/Base/Project/Src/Gui/Dialogs/AttachToProcessForm.Designer.cs rename to src/Main/Base/Project/Src/Gui/Dialogs/AbstractAttachToProcessForm.Designer.cs index 1cb0891352..6800386f66 100644 --- a/src/Main/Base/Project/Src/Gui/Dialogs/AttachToProcessForm.Designer.cs +++ b/src/Main/Base/Project/Src/Gui/Dialogs/AbstractAttachToProcessForm.Designer.cs @@ -1,13 +1,12 @@ // // -// -// +// // $Revision$ // namespace ICSharpCode.SharpDevelop.Gui { - partial class AttachToProcessForm + partial class AbstractAttachToProcessForm { /// /// Designer variable used to keep track of non-visual components. @@ -42,6 +41,8 @@ namespace ICSharpCode.SharpDevelop.Gui this.processColumnHeader = new System.Windows.Forms.ColumnHeader(); this.processIdColumnHeader = new System.Windows.Forms.ColumnHeader(); this.titleColumnHeader = new System.Windows.Forms.ColumnHeader(); + this.typeColumnHeader = new System.Windows.Forms.ColumnHeader(); + this.showNonManagedCheckBox = new System.Windows.Forms.CheckBox(); this.SuspendLayout(); // // attachButton @@ -85,10 +86,12 @@ namespace ICSharpCode.SharpDevelop.Gui this.listView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { this.processColumnHeader, this.processIdColumnHeader, - this.titleColumnHeader}); + this.titleColumnHeader, + this.typeColumnHeader}); this.listView.FullRowSelect = true; this.listView.HideSelection = false; this.listView.Location = new System.Drawing.Point(0, 0); + this.listView.MultiSelect = false; this.listView.Name = "listView"; this.listView.Size = new System.Drawing.Size(636, 334); this.listView.Sorting = System.Windows.Forms.SortOrder.Ascending; @@ -96,6 +99,7 @@ namespace ICSharpCode.SharpDevelop.Gui this.listView.UseCompatibleStateImageBehavior = false; this.listView.View = System.Windows.Forms.View.Details; this.listView.ItemActivate += new System.EventHandler(this.ListViewItemActivate); + this.listView.SelectedIndexChanged += new System.EventHandler(this.ListViewSelectedIndexChanged); // // processColumnHeader // @@ -109,7 +113,24 @@ namespace ICSharpCode.SharpDevelop.Gui // titleColumnHeader // this.titleColumnHeader.Text = "Title"; - this.titleColumnHeader.Width = 337; + this.titleColumnHeader.Width = 294; + // + // typeColumnHeader + // + this.typeColumnHeader.Text = "Type"; + this.typeColumnHeader.Width = 74; + // + // showNonManagedCheckBox + // + this.showNonManagedCheckBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.showNonManagedCheckBox.Location = new System.Drawing.Point(13, 339); + this.showNonManagedCheckBox.Name = "showNonManagedCheckBox"; + this.showNonManagedCheckBox.Size = new System.Drawing.Size(370, 24); + this.showNonManagedCheckBox.TabIndex = 5; + this.showNonManagedCheckBox.Text = "Show Non-Managed"; + this.showNonManagedCheckBox.UseVisualStyleBackColor = true; + this.showNonManagedCheckBox.CheckedChanged += new System.EventHandler(this.ShowNonManagedCheckBoxCheckedChanged); // // AttachToProcessForm // @@ -118,17 +139,20 @@ namespace ICSharpCode.SharpDevelop.Gui this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.cancelButton; this.ClientSize = new System.Drawing.Size(637, 374); + this.Controls.Add(this.showNonManagedCheckBox); this.Controls.Add(this.listView); this.Controls.Add(this.refreshButton); this.Controls.Add(this.cancelButton); this.Controls.Add(this.attachButton); - this.MinimumSize = new System.Drawing.Size(273, 140); - this.Name = "AttachToProcessForm"; + this.MinimumSize = new System.Drawing.Size(273, 240); + this.Name = "bstractAAttachToProcessForm"; this.ShowIcon = false; this.ShowInTaskbar = false; this.Text = "Attach to Process"; this.ResumeLayout(false); } + private System.Windows.Forms.CheckBox showNonManagedCheckBox; + private System.Windows.Forms.ColumnHeader typeColumnHeader; private System.Windows.Forms.ColumnHeader titleColumnHeader; private System.Windows.Forms.ColumnHeader processIdColumnHeader; private System.Windows.Forms.ColumnHeader processColumnHeader; diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/AttachToProcessForm.cs b/src/Main/Base/Project/Src/Gui/Dialogs/AbstractAttachToProcessForm.cs similarity index 72% rename from src/Main/Base/Project/Src/Gui/Dialogs/AttachToProcessForm.cs rename to src/Main/Base/Project/Src/Gui/Dialogs/AbstractAttachToProcessForm.cs index 664937c80e..e9b4b8e34d 100644 --- a/src/Main/Base/Project/Src/Gui/Dialogs/AttachToProcessForm.cs +++ b/src/Main/Base/Project/Src/Gui/Dialogs/AbstractAttachToProcessForm.cs @@ -7,18 +7,17 @@ using System; using System.Diagnostics; -using System.ComponentModel; using System.Drawing; -using System.IO; using System.Windows.Forms; using ICSharpCode.Core; +using ICSharpCode.SharpDevelop.Debugging; namespace ICSharpCode.SharpDevelop.Gui { - public partial class AttachToProcessForm : Form - { - public AttachToProcessForm() + public partial class AbstractAttachToProcessForm : Form + { + public AbstractAttachToProcessForm() { // // The InitializeComponent() call is required for Windows Forms designer support. @@ -32,29 +31,15 @@ namespace ICSharpCode.SharpDevelop.Gui public System.Diagnostics.Process Process { get { return GetSelectedProcess(); } } + + protected virtual void RefreshProcessList(ListView listView, bool showNonManaged) + { + } void RefreshProcessList() { - listView.Items.Clear(); - - Process currentProcess = Process.GetCurrentProcess(); - foreach (System.Diagnostics.Process process in System.Diagnostics.Process.GetProcesses()) { - try { - // Prevent attaching to our own process. - if (currentProcess.Id != process.Id) { - string fileName = Path.GetFileName(process.MainModule.FileName); - ListViewItem item = new ListViewItem(fileName); - item.SubItems.Add(process.Id.ToString()); - item.SubItems.Add(process.MainWindowTitle); - item.Tag = process; - listView.Items.Add(item); - } - } catch (Win32Exception) { - // Do nothing. - } - } + RefreshProcessList(listView, showNonManagedCheckBox.Checked); - listView.Sort(); if (listView.Items.Count > 0) { listView.Items[0].Selected = true; } else { @@ -95,5 +80,15 @@ namespace ICSharpCode.SharpDevelop.Gui Close(); } } + + void ShowNonManagedCheckBoxCheckedChanged(object sender, EventArgs e) + { + RefreshProcessList(); + } + + void ListViewSelectedIndexChanged(object sender, EventArgs e) + { + attachButton.Enabled = listView.SelectedItems.Count > 0; + } } } diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/AttachToProcessForm.resx b/src/Main/Base/Project/Src/Gui/Dialogs/AttachToProcessForm.resx deleted file mode 100644 index 7080a7d118..0000000000 --- a/src/Main/Base/Project/Src/Gui/Dialogs/AttachToProcessForm.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/src/Main/Base/Project/Src/Services/Debugger/DefaultDebugger.cs b/src/Main/Base/Project/Src/Services/Debugger/DefaultDebugger.cs index 3d33f4304e..511e080bb5 100644 --- a/src/Main/Base/Project/Src/Services/Debugger/DefaultDebugger.cs +++ b/src/Main/Base/Project/Src/Services/Debugger/DefaultDebugger.cs @@ -53,6 +53,10 @@ namespace ICSharpCode.SharpDevelop.Debugging } } + public void ShowAttachDialog() + { + } + public void Attach(Process process) { } diff --git a/src/Main/Base/Project/Src/Services/Debugger/IDebugger.cs b/src/Main/Base/Project/Src/Services/Debugger/IDebugger.cs index 72b2f46772..1c8a99c7c8 100644 --- a/src/Main/Base/Project/Src/Services/Debugger/IDebugger.cs +++ b/src/Main/Base/Project/Src/Services/Debugger/IDebugger.cs @@ -55,11 +55,19 @@ namespace ICSharpCode.SharpDevelop.Debugging void StepOver(); void StepOut(); + + /// + /// Shows a dialog so the user can attach to a process. + /// + void ShowAttachDialog(); + /// + /// Used to attach to an existing process. + /// void Attach(Process process); void Detach(); - + /// /// Gets the current value of the variable as string that can be displayed in tooltips. /// diff --git a/src/Main/StartUp/Project/Resources/StringResources.resources b/src/Main/StartUp/Project/Resources/StringResources.resources index 0a1797f814145ecdc987ef82097b99224d02d04d..bb2180ed463260c78dd5e3d00c29d9ee3fc11d79 100644 GIT binary patch delta 24466 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 uoEYYACb>X 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 delta 24328 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