Browse Source

parallel stack v0.1

pull/15/head
Eusebiu Marcu 15 years ago
parent
commit
fcdcf7cb4a
  1. 3
      data/resources/StringResources.resx
  2. 1
      data/resources/image/BitmapResources/BitmapResources.res
  3. BIN
      data/resources/image/BitmapResources/PadIcons/Parallel.png
  4. 7
      src/AddIns/Debugger/Debugger.AddIn/Debugger.AddIn.addin
  5. 875
      src/AddIns/Debugger/Debugger.AddIn/Debugger.AddIn.csproj
  6. 133
      src/AddIns/Debugger/Debugger.AddIn/Pads/ParallelPad/DrawSurface.xaml
  7. 105
      src/AddIns/Debugger/Debugger.AddIn/Pads/ParallelPad/DrawSurface.xaml.cs
  8. 357
      src/AddIns/Debugger/Debugger.AddIn/Pads/ParallelPad/ParallelStackPad.cs
  9. 37
      src/AddIns/Debugger/Debugger.AddIn/Pads/ParallelPad/ParallelStacksGraph.cs
  10. 113
      src/AddIns/Debugger/Debugger.AddIn/Pads/ParallelPad/ThreadStack.xaml
  11. 154
      src/AddIns/Debugger/Debugger.AddIn/Pads/ParallelPad/ThreadStack.xaml.cs
  12. 21
      src/AddIns/Debugger/Debugger.AddIn/Pads/RunningThreadsPad.cs
  13. 14
      src/AddIns/Debugger/Debugger.Core/ThreadCollection.cs
  14. BIN
      src/Main/StartUp/Project/Resources/BitmapResources.resources

3
data/resources/StringResources.resx

@ -5934,6 +5934,9 @@ Shows the full callstack of the error.</comment> @@ -5934,6 +5934,9 @@ Shows the full callstack of the error.</comment>
<data name="MainWindow.Windows.Debug.ObjectGraph" xml:space="preserve">
<value>Object Graph</value>
</data>
<data name="MainWindow.Windows.Debug.ParallelStack" xml:space="preserve">
<value>Parallel Stack</value>
</data>
<data name="MainWindow.Windows.Debug.RunToCursor" xml:space="preserve">
<value>Run to cursor</value>
</data>

1
data/resources/image/BitmapResources/BitmapResources.res

@ -247,6 +247,7 @@ PadIcons.LocalVariables = PadIcons\LocalVariables.png @@ -247,6 +247,7 @@ PadIcons.LocalVariables = PadIcons\LocalVariables.png
PadIcons.Threads = PadIcons\Threads.png
PadIcons.Exceptions = PadIcons\Exceptions.png
PadIcons.XPathQuery = PadIcons\XPathQuery.png
PadIcons.Parallel = PadIcons\Parallel.png
#SharpQuery icons
Icons.16x16.SharpQuery.DataBaseRoot = SharpQueryIcons\Icons.16x16.SharpQuery.Database.png

BIN
data/resources/image/BitmapResources/PadIcons/Parallel.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

7
src/AddIns/Debugger/Debugger.AddIn/Debugger.AddIn.addin

@ -123,6 +123,13 @@ @@ -123,6 +123,13 @@
icon = "PadIcons.LocalVariables"
class = "ICSharpCode.SharpDevelop.Gui.Pads.ObjectGraphPad"
defaultPosition = "Bottom, Hidden" />
<Pad id = "ParallelStacksPad"
category = "Debugger"
title = "${res:MainWindow.Windows.Debug.ParallelStack}"
icon = "PadIcons.Parallel"
class = "Debugger.AddIn.Pads.ParallelPad.ParallelStackPad"
defaultPosition = "Bottom, Hidden" />
</Path>
<Path name ="/SharpDevelop/Pads/WatchPad/ContextMenu">

875
src/AddIns/Debugger/Debugger.AddIn/Debugger.AddIn.csproj

@ -1,426 +1,451 @@ @@ -1,426 +1,451 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{EC06F96A-AEEC-49D6-B03D-AB87C6EB674C}</ProjectGuid>
<OutputType>Library</OutputType>
<RootNamespace>Debugger.AddIn</RootNamespace>
<AssemblyName>Debugger.AddIn</AssemblyName>
<WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>False</AllowUnsafeBlocks>
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow>
<NoStdLib>False</NoStdLib>
<RegisterForComInterop>False</RegisterForComInterop>
<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>
<BaseAddress>116916224</BaseAddress>
<PlatformTarget>AnyCPU</PlatformTarget>
<FileAlignment>4096</FileAlignment>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
<RunPostBuildEvent>Always</RunPostBuildEvent>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<SourceAnalysisOverrideSettingsFile>"C:\Program Files\SharpDevelop\3.0\bin\..\AddIns\AddIns\Misc\SourceAnalysis\Settings.SourceAnalysis"</SourceAnalysisOverrideSettingsFile>
<SourceAnalysisOverrideSettingsFile>C:\Dokumente und Einstellungen\HP\Anwendungsdaten\ICSharpCode/SharpDevelop3.0\Settings.SourceAnalysis</SourceAnalysisOverrideSettingsFile>
<PublishUrl>http://localhost/Debugger.AddIn/</PublishUrl>
<Install>true</Install>
<InstallFrom>Web</InstallFrom>
<UpdateEnabled>true</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>true</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
<OutputPath>..\..\..\..\AddIns\Debugger\</OutputPath>
<TargetFrameworkProfile>
</TargetFrameworkProfile>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>Full</DebugType>
<Optimize>false</Optimize>
<DefineConstants>DEBUG;TRACE</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<DefineConstants>TRACE</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<StartAction>Program</StartAction>
<StartProgram>..\..\..\..\bin\SharpDevelop.exe</StartProgram>
</PropertyGroup>
<ItemGroup>
<Reference Include="Microsoft.CSharp" />
<Reference Include="PresentationCore">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
<Reference Include="PresentationFramework">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
<Reference Include="PresentationFramework.Aero">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="System.Xaml" />
<Reference Include="WindowsBase">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
<Reference Include="WindowsFormsIntegration">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
<Reference Include="WindowsFormsIntegration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
<RequiredTargetFramework>4.0</RequiredTargetFramework>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="Pads\CallStackPad.xaml.cs">
<DependentUpon>CallStackPad.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Compile Include="Pads\Controls\ConditionCell.xaml.cs">
<DependentUpon>ConditionCell.xaml</DependentUpon>
</Compile>
<Compile Include="Pads\Controls\Converters.cs" />
<Compile Include="Pads\Controls\SimpleListViewControl.xaml.cs">
<DependentUpon>SimpleListViewControl.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Compile Include="Pads\Controls\TreeListView.cs" />
<Compile Include="Pads\Controls\WatchList.xaml.cs">
<DependentUpon>WatchList.xaml</DependentUpon>
</Compile>
<Compile Include="Pads\WatchInputBox.xaml.cs">
<DependentUpon>WatchInputBox.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="BreakpointChangeMenuBuilder.cs" />
<Compile Include="DisableBreakpointMenuCommand.cs" />
<Compile Include="EnableBreakpointMenuCommand.cs" />
<Compile Include="IsActiveBreakpointCondition.cs" />
<Compile Include="IsBreakpointCondition.cs" />
<Compile Include="Options\DebuggingOptions.cs" />
<Compile Include="Options\DebuggingOptionsPanel.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Options\DebuggingOptionsPanel.Designer.cs">
<DependentUpon>DebuggingOptionsPanel.cs</DependentUpon>
</Compile>
<Compile Include="Options\DebuggingSymbolsPanel.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Options\DebuggingSymbolsPanel.Designer.cs">
<DependentUpon>DebuggingSymbolsPanel.cs</DependentUpon>
</Compile>
<Compile Include="Pads\ObjectGraphPad.cs" />
<Compile Include="Pads\SelectLanguageCommand.cs" />
<Compile Include="Pads\WatchPadCommands.cs" />
<Compile Include="Pads\BreakPointsPad.cs" />
<Compile Include="Pads\ConsolePad.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Pads\LoadedModulesPad.cs" />
<Compile Include="Pads\LocalVarPad.cs" />
<Compile Include="Pads\RunningThreadsPad.cs" />
<Compile Include="Pads\WatchPad.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Pads\WatchPadModel.cs" />
<Compile Include="Service\AttachToProcessForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Service\DebuggeeExceptionForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Service\DebuggeeExceptionForm.Designer.cs">
<DependentUpon>DebuggeeExceptionForm.cs</DependentUpon>
</Compile>
<Compile Include="Service\DebuggerEventForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Service\DebuggerEventForm.Designer.cs">
<DependentUpon>DebuggerEventForm.cs</DependentUpon>
</Compile>
<Compile Include="Service\EditBreakpointScriptWindow.xaml.cs">
<DependentUpon>EditBreakpointScriptWindow.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Compile Include="TreeModel\DebuggerResourceService.cs" />
<Compile Include="Visualizers\Commands\ExpressionVisualizerCommand.cs" />
<Compile Include="Visualizers\Commands\GridVisualizerCommand.cs" />
<Compile Include="Visualizers\Commands\IVisualizerDescriptor.cs" />
<Compile Include="Visualizers\Commands\ObjectGraphVisualizerCommand.cs" />
<Compile Include="Visualizers\Commands\GridVisualizerMenuCommand.cs" />
<Compile Include="Visualizers\Commands\ObjectGraphVisualizerMenuCommand.cs" />
<Compile Include="Visualizers\Commands\TextVisualizerCommand.cs" />
<Compile Include="Visualizers\Commands\VisualizerDescriptors.cs" />
<Compile Include="Visualizers\Commands\XmlVisualizerCommand.cs" />
<Compile Include="Visualizers\Common\DebuggerVisualizerException.cs" />
<Compile Include="Visualizers\Common\IEvaluate.cs" />
<Compile Include="Visualizers\Common\IListValuesProvider.cs" />
<Compile Include="Visualizers\Common\ObjectPropertyComparer.cs" />
<Compile Include="Visualizers\Common\VirtualizingCollection.cs" />
<Compile Include="Visualizers\Common\VirtualizingObservableCollection.cs" />
<Compile Include="Visualizers\Controls\DragScrollViewer.cs" />
<Compile Include="Visualizers\Graph\Drawing\PositionedGraphNodeControl.xaml.cs">
<DependentUpon>PositionedGraphNodeControl.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Compile Include="Visualizers\Graph\Expanded.cs" />
<Compile Include="Visualizers\Graph\ExpandedContentNodes.cs" />
<Compile Include="Visualizers\Graph\ExpandedExpressions.cs" />
<Compile Include="Visualizers\Graph\Layout\ContentNodeEventArgs.cs" />
<Compile Include="Visualizers\Graph\Layout\ContentPropertyNode.cs" />
<Compile Include="Visualizers\Graph\Layout\ContentNode.cs" />
<Compile Include="Visualizers\Graph\Layout\GraphEdgeRouter.cs" />
<Compile Include="Visualizers\Graph\Layout\SplineRouting\Box.cs" />
<Compile Include="Visualizers\Graph\Layout\SplineRouting\Edge.cs" />
<Compile Include="Visualizers\Graph\Layout\SplineRouting\EdgeRouter.cs" />
<Compile Include="Visualizers\Graph\Layout\SplineRouting\GeomUtils.cs" />
<Compile Include="Visualizers\Graph\Layout\SplineRouting\IEdge.cs" />
<Compile Include="Visualizers\Graph\Layout\SplineRouting\IPoint.cs" />
<Compile Include="Visualizers\Graph\Layout\SplineRouting\IRect.cs" />
<Compile Include="Visualizers\Graph\Layout\SplineRouting\Point2D.cs" />
<Compile Include="Visualizers\Graph\Layout\SplineRouting\RouteGraph\EdgeStartEnd.cs" />
<Compile Include="Visualizers\Graph\Layout\SplineRouting\RouteGraph\RoutedEdge.cs" />
<Compile Include="Visualizers\Graph\Layout\SplineRouting\RouteGraph\RouteGraph.cs" />
<Compile Include="Visualizers\Graph\Layout\SplineRouting\RouteGraph\RouteGraphEdge.cs" />
<Compile Include="Visualizers\Graph\Layout\SplineRouting\RouteGraph\RouteVertex.cs" />
<Compile Include="Visualizers\Graph\Layout\SplineRouting\ShortestPath\AStarShortestPathFinder.cs" />
<Compile Include="Visualizers\Graph\NodeControlCache.cs" />
<Compile Include="Visualizers\Graph\ObjectGraphControl.xaml.cs">
<DependentUpon>ObjectGraphControl.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Compile Include="Visualizers\Graph\ObjectGraph\NamedEdge.cs" />
<Compile Include="Visualizers\Graph\TreeModel\AbstractNode.cs" />
<Compile Include="Visualizers\Graph\TreeModel\BaseClassNode.cs" />
<Compile Include="Visualizers\Graph\TreeModel\ThisNode.cs" />
<Compile Include="Visualizers\Graph\TreeModel\NonPublicMembersNode.cs" />
<Compile Include="Visualizers\Graph\TreeModel\PropertyNode.cs" />
<Compile Include="Visualizers\GridVisualizer\ValueProviders\GridValuesProvider.cs" />
<Compile Include="Visualizers\IEnumerableNode.cs" />
<Compile Include="Visualizers\PresentationBindings\GridViewColumnHider.cs" />
<Compile Include="Visualizers\PresentationBindings\GridViewHideableColumn.cs" />
<Compile Include="Visualizers\PresentationBindings\TooltipVisibilityConverter.cs" />
<Compile Include="Visualizers\TextVisualizer\TextVisualizerMode.cs" />
<Compile Include="Visualizers\TextVisualizer\TextVisualizerWindow.xaml.cs">
<DependentUpon>TextVisualizerWindow.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Compile Include="Visualizers\Utils\AtomicType.cs" />
<Compile Include="Visualizers\Utils\IEnumerableExtensions.cs" />
<Compile Include="Visualizers\Utils\ITreeNode.cs" />
<Compile Include="Visualizers\Utils\LinqUtils.cs" />
<Compile Include="Visualizers\Utils\ListHelper.cs" />
<Compile Include="Visualizers\Utils\StringHelper.cs" />
<Compile Include="Visualizers\Utils\TreeFlattener.cs" />
<Compile Include="Visualizers\Utils\TypeResolver.cs" />
<EmbeddedResource Include="Service\DebuggeeExceptionForm.resx">
<DependentUpon>DebuggeeExceptionForm.cs</DependentUpon>
</EmbeddedResource>
<Compile Include="Service\RemotingConfigurationHelpper.cs" />
<Compile Include="Service\RunToCursorCommand.cs" />
<Compile Include="Service\WindowsDebugger.cs" />
<EmbeddedResource Include="Options\DebuggingOptionsPanel.resx">
<DependentUpon>DebuggingOptionsPanel.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Options\DebuggingSymbolsPanel.resx">
<DependentUpon>DebuggingSymbolsPanel.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Service\DebuggerEventForm.resx">
<DependentUpon>DebuggerEventForm.cs</DependentUpon>
</EmbeddedResource>
<Compile Include="Service\SetCurrentStatementCommand.cs" />
<Compile Include="..\..\..\Main\GlobalAssemblyInfo.cs">
<Link>Properties\GlobalAssemblyInfo.cs</Link>
</Compile>
<Compile Include="Pads\DebuggerPad.cs" />
<Compile Include="Pads\RunningThreadsPad.Menu.cs" />
<Compile Include="TreeModel\TreeNode.cs" />
<Compile Include="TreeModel\Adapters\TreeViewVarNode.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="TreeModel\ArrayRangeNode.cs" />
<Compile Include="TreeModel\ExpressionNode.cs" />
<Compile Include="TreeModel\IContextMenu.cs" />
<Compile Include="TreeModel\ISetText.cs" />
<Compile Include="TreeModel\ChildNodesOfObject.cs" />
<Compile Include="TreeModel\StackFrameNode.cs" />
<Compile Include="TreeModel\Utils.cs" />
<Compile Include="Visualizers\Graph\Drawing\CanvasLocationAdapter.cs" />
<Compile Include="Visualizers\Graph\Drawing\GraphDrawer.cs" />
<Compile Include="Visualizers\Graph\ExpandedPaths.cs" />
<Compile Include="Visualizers\Graph\Layout\GraphDiff.cs" />
<Compile Include="Visualizers\Graph\Layout\GraphMatcher.cs" />
<Compile Include="Visualizers\Graph\Layout\PositionedEdge.cs" />
<Compile Include="Visualizers\Graph\Layout\PositionedGraph.cs" />
<Compile Include="Visualizers\Graph\Layout\PositionedGraphNode.cs" />
<Compile Include="Visualizers\Graph\Layout\PositionedNodeProperty.cs" />
<Compile Include="Visualizers\Graph\Layout\PositionedPropertyEventArgs.cs" />
<Compile Include="Visualizers\Graph\Layout\Tree\LayoutDirection.cs" />
<Compile Include="Visualizers\Graph\Layout\Tree\TreeEdge.cs" />
<Compile Include="Visualizers\Graph\Layout\Tree\TreeLayouter.cs" />
<Compile Include="Visualizers\Graph\Layout\Tree\TreeGraphNode.cs" />
<Compile Include="Visualizers\Graph\Layout\Tree\TreeGraphNodeLR.cs" />
<Compile Include="Visualizers\Graph\Layout\Tree\TreeGraphNodeTB.cs" />
<Compile Include="Visualizers\Graph\ObjectGraph\ObjectGraph.cs" />
<Compile Include="Visualizers\Graph\ObjectGraph\ObjectGraphBuilder.cs" />
<Compile Include="Visualizers\Graph\ObjectGraph\ObjectGraphNode.cs" />
<Compile Include="Visualizers\Graph\ObjectGraph\ObjectGraphProperty.cs" />
<Compile Include="Visualizers\GridVisualizer\GridVisualizerWindow.xaml.cs">
<DependentUpon>GridVisualizerWindow.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Compile Include="Visualizers\GridVisualizer\ObjectValue.cs" />
<Compile Include="Visualizers\GridVisualizer\ValueProviders\EnumerableValuesProvider.cs" />
<Compile Include="Visualizers\GridVisualizer\ValueProviders\ListValuesProvider.cs" />
<Compile Include="Visualizers\ObjectProperty.cs" />
<Compile Include="Visualizers\Utils\DebuggerHelpers.cs" />
<Compile Include="Visualizers\Utils\DictionaryExtensions.cs" />
<Compile Include="Visualizers\Utils\Lookup.cs" />
<Compile Include="Visualizers\Utils\LookupValueCollection.cs" />
<Compile Include="Visualizers\Graph\ObjectGraphWindow.xaml.cs">
<DependentUpon>ObjectGraphWindow.xaml</DependentUpon>
</Compile>
<Compile Include="Visualizers\ICorDebug.cs" />
<Compile Include="Visualizers\IListNode.cs" />
<Compile Include="Visualizers\PresentationBindings\DisplayAttribute.cs" />
<Compile Include="Visualizers\PresentationBindings\EnumViewModel.cs" />
<Compile Include="Visualizers\PresentationBindings\ViewModelBase.cs" />
<None Include="COPYING" />
</ItemGroup>
<ItemGroup>
<Content Include="Debugger.AddIn.addin">
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</Content>
<ProjectReference Include="..\..\..\Libraries\AvalonEdit\ICSharpCode.AvalonEdit\ICSharpCode.AvalonEdit.csproj">
<Project>{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}</Project>
<Name>ICSharpCode.AvalonEdit</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\Main\Base\Project\ICSharpCode.SharpDevelop.csproj">
<Project>{2748AD25-9C63-4E12-877B-4DCE96FBED54}</Project>
<Name>ICSharpCode.SharpDevelop</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\Main\Core\Project\ICSharpCode.Core.csproj">
<Project>{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}</Project>
<Name>ICSharpCode.Core</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\Main\ICSharpCode.Core.Presentation\ICSharpCode.Core.Presentation.csproj">
<Project>{7E4A7172-7FF5-48D0-B719-7CD959DD1AC9}</Project>
<Name>ICSharpCode.Core.Presentation</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\Debugger.Core\Debugger.Core.csproj">
<Project>{1D18D788-F7EE-4585-A23B-34DC8EC63CB8}</Project>
<Name>Debugger.Core</Name>
<Private>False</Private>
<SpecificVersion>False</SpecificVersion>
</ProjectReference>
<Content Include="PostBuildEvent.proj" />
<ProjectReference Include="..\..\..\Main\ICSharpCode.SharpDevelop.Dom\Project\ICSharpCode.SharpDevelop.Dom.csproj">
<Project>{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}</Project>
<Name>ICSharpCode.SharpDevelop.Dom</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\Main\ICSharpCode.SharpDevelop.Widgets\Project\ICSharpCode.SharpDevelop.Widgets.csproj">
<Project>{8035765F-D51F-4A0C-A746-2FD100E19419}</Project>
<Name>ICSharpCode.SharpDevelop.Widgets</Name>
<Private>False</Private>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Page Include="Pads\CallStackPad.xaml" />
<Page Include="Pads\Controls\ConditionCell.xaml" />
<Page Include="Pads\Controls\SimpleListViewControl.xaml" />
<Page Include="Pads\Controls\WatchList.xaml" />
<Page Include="Pads\WatchInputBox.xaml" />
<Page Include="Service\EditBreakpointScriptWindow.xaml" />
<Page Include="Visualizers\Graph\Drawing\NodeControlResources.xaml" />
<Page Include="Visualizers\Graph\Drawing\PositionedGraphNodeControl.xaml" />
<Page Include="Visualizers\Graph\ObjectGraphControl.xaml" />
<Page Include="Visualizers\GridVisualizer\GridVisualizerWindow.xaml" />
<Page Include="Visualizers\TextVisualizer\TextVisualizerWindow.xaml" />
<ProjectReference Include="..\..\..\Libraries\NRefactory\Project\NRefactory.csproj">
<Project>{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}</Project>
<Name>NRefactory</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\Libraries\TreeViewAdv\Aga.Controls\Aga.Controls.csproj">
<Project>{E73BB233-D88B-44A7-A98F-D71EE158381D}</Project>
<Name>Aga.Controls</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\Main\ICSharpCode.Core.WinForms\ICSharpCode.Core.WinForms.csproj">
<Project>{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}</Project>
<Name>ICSharpCode.Core.WinForms</Name>
<Private>False</Private>
</ProjectReference>
<Folder Include="Pads\Controls" />
<Folder Include="Visualizers\Graph" />
<Folder Include="Visualizers\Graph\Drawing" />
<Folder Include="Visualizers\Graph\Layout" />
<Folder Include="Visualizers\Graph\Layout\SplineRouting" />
<Folder Include="Visualizers\Graph\Layout\SplineRouting\RouteGraph" />
<Folder Include="Visualizers\Graph\Layout\SplineRouting\ShortestPath" />
<Folder Include="Visualizers\Graph\Layout\Tree" />
<Folder Include="Visualizers\Graph\TreeModel" />
<Folder Include="Visualizers\Graph\ObjectGraph" />
<Folder Include="Visualizers\GridVisualizer\ValueProviders" />
<Folder Include="Visualizers\Controls" />
<Folder Include="Visualizers\Common" />
<Folder Include="Visualizers\Commands" />
<Folder Include="Visualizers\TextVisualizer" />
<Folder Include="Visualizers\Utils" />
<Folder Include="Visualizers\GridVisualizer" />
<Folder Include="Visualizers\PresentationBindings" />
<Page Include="Visualizers\Graph\ObjectGraphWindow.xaml" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework Client Profile</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.2.0">
<Visible>False</Visible>
<ProductName>.NET Framework 2.0 %28x86%29</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.0">
<Visible>False</Visible>
<ProductName>.NET Framework 3.0 %28x86%29</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>false</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" />
<Import Project="PostBuildEvent.proj" />
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{EC06F96A-AEEC-49D6-B03D-AB87C6EB674C}</ProjectGuid>
<OutputType>Library</OutputType>
<RootNamespace>Debugger.AddIn</RootNamespace>
<AssemblyName>Debugger.AddIn</AssemblyName>
<WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>False</AllowUnsafeBlocks>
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow>
<NoStdLib>False</NoStdLib>
<RegisterForComInterop>False</RegisterForComInterop>
<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>
<BaseAddress>116916224</BaseAddress>
<PlatformTarget>AnyCPU</PlatformTarget>
<FileAlignment>4096</FileAlignment>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
<RunPostBuildEvent>Always</RunPostBuildEvent>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<SourceAnalysisOverrideSettingsFile>"C:\Program Files\SharpDevelop\3.0\bin\..\AddIns\AddIns\Misc\SourceAnalysis\Settings.SourceAnalysis"</SourceAnalysisOverrideSettingsFile>
<SourceAnalysisOverrideSettingsFile>C:\Dokumente und Einstellungen\HP\Anwendungsdaten\ICSharpCode/SharpDevelop3.0\Settings.SourceAnalysis</SourceAnalysisOverrideSettingsFile>
<PublishUrl>http://localhost/Debugger.AddIn/</PublishUrl>
<Install>true</Install>
<InstallFrom>Web</InstallFrom>
<UpdateEnabled>true</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>true</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
<OutputPath>..\..\..\..\AddIns\Debugger\</OutputPath>
<TargetFrameworkProfile>
</TargetFrameworkProfile>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>Full</DebugType>
<Optimize>false</Optimize>
<DefineConstants>DEBUG;TRACE</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<DefineConstants>TRACE</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<StartAction>Program</StartAction>
<StartProgram>..\..\..\..\bin\SharpDevelop.exe</StartProgram>
</PropertyGroup>
<ItemGroup>
<Reference Include="GraphSharp">
<HintPath>..\..\..\Libraries\GraphSharp\GraphSharp.dll</HintPath>
</Reference>
<Reference Include="GraphSharp.Controls">
<HintPath>..\..\..\Libraries\GraphSharp\GraphSharp.Controls.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Contracts">
<HintPath>..\..\..\Libraries\GraphSharp\Microsoft.Contracts.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CSharp" />
<Reference Include="PresentationCore">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
<Reference Include="PresentationFramework">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
<Reference Include="PresentationFramework.Aero">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
<Reference Include="QuickGraph">
<HintPath>..\..\..\Libraries\GraphSharp\QuickGraph.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="System.Xaml" />
<Reference Include="WindowsBase">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
<Reference Include="WindowsFormsIntegration">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
<Reference Include="WindowsFormsIntegration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
<RequiredTargetFramework>4.0</RequiredTargetFramework>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="Pads\CallStackPad.xaml.cs">
<DependentUpon>CallStackPad.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Compile Include="Pads\Controls\ConditionCell.xaml.cs">
<DependentUpon>ConditionCell.xaml</DependentUpon>
</Compile>
<Compile Include="Pads\Controls\Converters.cs" />
<Compile Include="Pads\Controls\SimpleListViewControl.xaml.cs">
<DependentUpon>SimpleListViewControl.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Compile Include="Pads\Controls\TreeListView.cs" />
<Compile Include="Pads\Controls\WatchList.xaml.cs">
<DependentUpon>WatchList.xaml</DependentUpon>
</Compile>
<Compile Include="Pads\ParallelPad\DrawSurface.xaml.cs">
<DependentUpon>DrawSurface.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Compile Include="Pads\ParallelPad\ParallelStackPad.cs" />
<Compile Include="Pads\ParallelPad\ParallelStacksGraph.cs" />
<Compile Include="Pads\ParallelPad\ThreadStack.xaml.cs">
<DependentUpon>ThreadStack.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Compile Include="Pads\WatchInputBox.xaml.cs">
<DependentUpon>WatchInputBox.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="BreakpointChangeMenuBuilder.cs" />
<Compile Include="DisableBreakpointMenuCommand.cs" />
<Compile Include="EnableBreakpointMenuCommand.cs" />
<Compile Include="IsActiveBreakpointCondition.cs" />
<Compile Include="IsBreakpointCondition.cs" />
<Compile Include="Options\DebuggingOptions.cs" />
<Compile Include="Options\DebuggingOptionsPanel.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Options\DebuggingOptionsPanel.Designer.cs">
<DependentUpon>DebuggingOptionsPanel.cs</DependentUpon>
</Compile>
<Compile Include="Options\DebuggingSymbolsPanel.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Options\DebuggingSymbolsPanel.Designer.cs">
<DependentUpon>DebuggingSymbolsPanel.cs</DependentUpon>
</Compile>
<Compile Include="Pads\ObjectGraphPad.cs" />
<Compile Include="Pads\SelectLanguageCommand.cs" />
<Compile Include="Pads\WatchPadCommands.cs" />
<Compile Include="Pads\BreakPointsPad.cs" />
<Compile Include="Pads\ConsolePad.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Pads\LoadedModulesPad.cs" />
<Compile Include="Pads\LocalVarPad.cs" />
<Compile Include="Pads\RunningThreadsPad.cs" />
<Compile Include="Pads\WatchPad.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Pads\WatchPadModel.cs" />
<Compile Include="Service\AttachToProcessForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Service\DebuggeeExceptionForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Service\DebuggeeExceptionForm.Designer.cs">
<DependentUpon>DebuggeeExceptionForm.cs</DependentUpon>
</Compile>
<Compile Include="Service\DebuggerEventForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Service\DebuggerEventForm.Designer.cs">
<DependentUpon>DebuggerEventForm.cs</DependentUpon>
</Compile>
<Compile Include="Service\EditBreakpointScriptWindow.xaml.cs">
<DependentUpon>EditBreakpointScriptWindow.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Compile Include="TreeModel\DebuggerResourceService.cs" />
<Compile Include="Visualizers\Commands\ExpressionVisualizerCommand.cs" />
<Compile Include="Visualizers\Commands\GridVisualizerCommand.cs" />
<Compile Include="Visualizers\Commands\IVisualizerDescriptor.cs" />
<Compile Include="Visualizers\Commands\ObjectGraphVisualizerCommand.cs" />
<Compile Include="Visualizers\Commands\GridVisualizerMenuCommand.cs" />
<Compile Include="Visualizers\Commands\ObjectGraphVisualizerMenuCommand.cs" />
<Compile Include="Visualizers\Commands\TextVisualizerCommand.cs" />
<Compile Include="Visualizers\Commands\VisualizerDescriptors.cs" />
<Compile Include="Visualizers\Commands\XmlVisualizerCommand.cs" />
<Compile Include="Visualizers\Common\DebuggerVisualizerException.cs" />
<Compile Include="Visualizers\Common\IEvaluate.cs" />
<Compile Include="Visualizers\Common\IListValuesProvider.cs" />
<Compile Include="Visualizers\Common\ObjectPropertyComparer.cs" />
<Compile Include="Visualizers\Common\VirtualizingCollection.cs" />
<Compile Include="Visualizers\Common\VirtualizingObservableCollection.cs" />
<Compile Include="Visualizers\Controls\DragScrollViewer.cs" />
<Compile Include="Visualizers\Graph\Drawing\PositionedGraphNodeControl.xaml.cs">
<DependentUpon>PositionedGraphNodeControl.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Compile Include="Visualizers\Graph\Expanded.cs" />
<Compile Include="Visualizers\Graph\ExpandedContentNodes.cs" />
<Compile Include="Visualizers\Graph\ExpandedExpressions.cs" />
<Compile Include="Visualizers\Graph\Layout\ContentNodeEventArgs.cs" />
<Compile Include="Visualizers\Graph\Layout\ContentPropertyNode.cs" />
<Compile Include="Visualizers\Graph\Layout\ContentNode.cs" />
<Compile Include="Visualizers\Graph\Layout\GraphEdgeRouter.cs" />
<Compile Include="Visualizers\Graph\Layout\SplineRouting\Box.cs" />
<Compile Include="Visualizers\Graph\Layout\SplineRouting\Edge.cs" />
<Compile Include="Visualizers\Graph\Layout\SplineRouting\EdgeRouter.cs" />
<Compile Include="Visualizers\Graph\Layout\SplineRouting\GeomUtils.cs" />
<Compile Include="Visualizers\Graph\Layout\SplineRouting\IEdge.cs" />
<Compile Include="Visualizers\Graph\Layout\SplineRouting\IPoint.cs" />
<Compile Include="Visualizers\Graph\Layout\SplineRouting\IRect.cs" />
<Compile Include="Visualizers\Graph\Layout\SplineRouting\Point2D.cs" />
<Compile Include="Visualizers\Graph\Layout\SplineRouting\RouteGraph\EdgeStartEnd.cs" />
<Compile Include="Visualizers\Graph\Layout\SplineRouting\RouteGraph\RoutedEdge.cs" />
<Compile Include="Visualizers\Graph\Layout\SplineRouting\RouteGraph\RouteGraph.cs" />
<Compile Include="Visualizers\Graph\Layout\SplineRouting\RouteGraph\RouteGraphEdge.cs" />
<Compile Include="Visualizers\Graph\Layout\SplineRouting\RouteGraph\RouteVertex.cs" />
<Compile Include="Visualizers\Graph\Layout\SplineRouting\ShortestPath\AStarShortestPathFinder.cs" />
<Compile Include="Visualizers\Graph\NodeControlCache.cs" />
<Compile Include="Visualizers\Graph\ObjectGraphControl.xaml.cs">
<DependentUpon>ObjectGraphControl.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Compile Include="Visualizers\Graph\ObjectGraph\NamedEdge.cs" />
<Compile Include="Visualizers\Graph\TreeModel\AbstractNode.cs" />
<Compile Include="Visualizers\Graph\TreeModel\BaseClassNode.cs" />
<Compile Include="Visualizers\Graph\TreeModel\ThisNode.cs" />
<Compile Include="Visualizers\Graph\TreeModel\NonPublicMembersNode.cs" />
<Compile Include="Visualizers\Graph\TreeModel\PropertyNode.cs" />
<Compile Include="Visualizers\GridVisualizer\ValueProviders\GridValuesProvider.cs" />
<Compile Include="Visualizers\IEnumerableNode.cs" />
<Compile Include="Visualizers\PresentationBindings\GridViewColumnHider.cs" />
<Compile Include="Visualizers\PresentationBindings\GridViewHideableColumn.cs" />
<Compile Include="Visualizers\PresentationBindings\TooltipVisibilityConverter.cs" />
<Compile Include="Visualizers\TextVisualizer\TextVisualizerMode.cs" />
<Compile Include="Visualizers\TextVisualizer\TextVisualizerWindow.xaml.cs">
<DependentUpon>TextVisualizerWindow.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Compile Include="Visualizers\Utils\AtomicType.cs" />
<Compile Include="Visualizers\Utils\IEnumerableExtensions.cs" />
<Compile Include="Visualizers\Utils\ITreeNode.cs" />
<Compile Include="Visualizers\Utils\LinqUtils.cs" />
<Compile Include="Visualizers\Utils\ListHelper.cs" />
<Compile Include="Visualizers\Utils\StringHelper.cs" />
<Compile Include="Visualizers\Utils\TreeFlattener.cs" />
<Compile Include="Visualizers\Utils\TypeResolver.cs" />
<EmbeddedResource Include="Service\DebuggeeExceptionForm.resx">
<DependentUpon>DebuggeeExceptionForm.cs</DependentUpon>
</EmbeddedResource>
<Compile Include="Service\RemotingConfigurationHelpper.cs" />
<Compile Include="Service\RunToCursorCommand.cs" />
<Compile Include="Service\WindowsDebugger.cs" />
<EmbeddedResource Include="Options\DebuggingOptionsPanel.resx">
<DependentUpon>DebuggingOptionsPanel.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Options\DebuggingSymbolsPanel.resx">
<DependentUpon>DebuggingSymbolsPanel.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Service\DebuggerEventForm.resx">
<DependentUpon>DebuggerEventForm.cs</DependentUpon>
</EmbeddedResource>
<Compile Include="Service\SetCurrentStatementCommand.cs" />
<Compile Include="..\..\..\Main\GlobalAssemblyInfo.cs">
<Link>Properties\GlobalAssemblyInfo.cs</Link>
</Compile>
<Compile Include="Pads\DebuggerPad.cs" />
<Compile Include="Pads\RunningThreadsPad.Menu.cs" />
<Compile Include="TreeModel\TreeNode.cs" />
<Compile Include="TreeModel\Adapters\TreeViewVarNode.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="TreeModel\ArrayRangeNode.cs" />
<Compile Include="TreeModel\ExpressionNode.cs" />
<Compile Include="TreeModel\IContextMenu.cs" />
<Compile Include="TreeModel\ISetText.cs" />
<Compile Include="TreeModel\ChildNodesOfObject.cs" />
<Compile Include="TreeModel\StackFrameNode.cs" />
<Compile Include="TreeModel\Utils.cs" />
<Compile Include="Visualizers\Graph\Drawing\CanvasLocationAdapter.cs" />
<Compile Include="Visualizers\Graph\Drawing\GraphDrawer.cs" />
<Compile Include="Visualizers\Graph\ExpandedPaths.cs" />
<Compile Include="Visualizers\Graph\Layout\GraphDiff.cs" />
<Compile Include="Visualizers\Graph\Layout\GraphMatcher.cs" />
<Compile Include="Visualizers\Graph\Layout\PositionedEdge.cs" />
<Compile Include="Visualizers\Graph\Layout\PositionedGraph.cs" />
<Compile Include="Visualizers\Graph\Layout\PositionedGraphNode.cs" />
<Compile Include="Visualizers\Graph\Layout\PositionedNodeProperty.cs" />
<Compile Include="Visualizers\Graph\Layout\PositionedPropertyEventArgs.cs" />
<Compile Include="Visualizers\Graph\Layout\Tree\LayoutDirection.cs" />
<Compile Include="Visualizers\Graph\Layout\Tree\TreeEdge.cs" />
<Compile Include="Visualizers\Graph\Layout\Tree\TreeLayouter.cs" />
<Compile Include="Visualizers\Graph\Layout\Tree\TreeGraphNode.cs" />
<Compile Include="Visualizers\Graph\Layout\Tree\TreeGraphNodeLR.cs" />
<Compile Include="Visualizers\Graph\Layout\Tree\TreeGraphNodeTB.cs" />
<Compile Include="Visualizers\Graph\ObjectGraph\ObjectGraph.cs" />
<Compile Include="Visualizers\Graph\ObjectGraph\ObjectGraphBuilder.cs" />
<Compile Include="Visualizers\Graph\ObjectGraph\ObjectGraphNode.cs" />
<Compile Include="Visualizers\Graph\ObjectGraph\ObjectGraphProperty.cs" />
<Compile Include="Visualizers\GridVisualizer\GridVisualizerWindow.xaml.cs">
<DependentUpon>GridVisualizerWindow.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Compile Include="Visualizers\GridVisualizer\ObjectValue.cs" />
<Compile Include="Visualizers\GridVisualizer\ValueProviders\EnumerableValuesProvider.cs" />
<Compile Include="Visualizers\GridVisualizer\ValueProviders\ListValuesProvider.cs" />
<Compile Include="Visualizers\ObjectProperty.cs" />
<Compile Include="Visualizers\Utils\DebuggerHelpers.cs" />
<Compile Include="Visualizers\Utils\DictionaryExtensions.cs" />
<Compile Include="Visualizers\Utils\Lookup.cs" />
<Compile Include="Visualizers\Utils\LookupValueCollection.cs" />
<Compile Include="Visualizers\Graph\ObjectGraphWindow.xaml.cs">
<DependentUpon>ObjectGraphWindow.xaml</DependentUpon>
</Compile>
<Compile Include="Visualizers\ICorDebug.cs" />
<Compile Include="Visualizers\IListNode.cs" />
<Compile Include="Visualizers\PresentationBindings\DisplayAttribute.cs" />
<Compile Include="Visualizers\PresentationBindings\EnumViewModel.cs" />
<Compile Include="Visualizers\PresentationBindings\ViewModelBase.cs" />
<None Include="COPYING" />
</ItemGroup>
<ItemGroup>
<Content Include="Debugger.AddIn.addin">
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</Content>
<ProjectReference Include="..\..\..\Libraries\AvalonEdit\ICSharpCode.AvalonEdit\ICSharpCode.AvalonEdit.csproj">
<Project>{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}</Project>
<Name>ICSharpCode.AvalonEdit</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\Main\Base\Project\ICSharpCode.SharpDevelop.csproj">
<Project>{2748AD25-9C63-4E12-877B-4DCE96FBED54}</Project>
<Name>ICSharpCode.SharpDevelop</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\Main\Core\Project\ICSharpCode.Core.csproj">
<Project>{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}</Project>
<Name>ICSharpCode.Core</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\Main\ICSharpCode.Core.Presentation\ICSharpCode.Core.Presentation.csproj">
<Project>{7E4A7172-7FF5-48D0-B719-7CD959DD1AC9}</Project>
<Name>ICSharpCode.Core.Presentation</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\Debugger.Core\Debugger.Core.csproj">
<Project>{1D18D788-F7EE-4585-A23B-34DC8EC63CB8}</Project>
<Name>Debugger.Core</Name>
<Private>False</Private>
<SpecificVersion>False</SpecificVersion>
</ProjectReference>
<Content Include="PostBuildEvent.proj" />
<ProjectReference Include="..\..\..\Main\ICSharpCode.SharpDevelop.Dom\Project\ICSharpCode.SharpDevelop.Dom.csproj">
<Project>{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}</Project>
<Name>ICSharpCode.SharpDevelop.Dom</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\Main\ICSharpCode.SharpDevelop.Widgets\Project\ICSharpCode.SharpDevelop.Widgets.csproj">
<Project>{8035765F-D51F-4A0C-A746-2FD100E19419}</Project>
<Name>ICSharpCode.SharpDevelop.Widgets</Name>
<Private>False</Private>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Page Include="Pads\CallStackPad.xaml" />
<Page Include="Pads\Controls\ConditionCell.xaml" />
<Page Include="Pads\Controls\SimpleListViewControl.xaml" />
<Page Include="Pads\Controls\WatchList.xaml" />
<Page Include="Pads\ParallelPad\DrawSurface.xaml" />
<Page Include="Pads\ParallelPad\ThreadStack.xaml" />
<Page Include="Pads\WatchInputBox.xaml" />
<Page Include="Service\EditBreakpointScriptWindow.xaml" />
<Page Include="Visualizers\Graph\Drawing\NodeControlResources.xaml" />
<Page Include="Visualizers\Graph\Drawing\PositionedGraphNodeControl.xaml" />
<Page Include="Visualizers\Graph\ObjectGraphControl.xaml" />
<Page Include="Visualizers\GridVisualizer\GridVisualizerWindow.xaml" />
<Page Include="Visualizers\TextVisualizer\TextVisualizerWindow.xaml" />
<ProjectReference Include="..\..\..\Libraries\NRefactory\Project\NRefactory.csproj">
<Project>{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}</Project>
<Name>NRefactory</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\Libraries\TreeViewAdv\Aga.Controls\Aga.Controls.csproj">
<Project>{E73BB233-D88B-44A7-A98F-D71EE158381D}</Project>
<Name>Aga.Controls</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\Main\ICSharpCode.Core.WinForms\ICSharpCode.Core.WinForms.csproj">
<Project>{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}</Project>
<Name>ICSharpCode.Core.WinForms</Name>
<Private>False</Private>
</ProjectReference>
<Folder Include="Pads\Controls" />
<Folder Include="Pads\ParallelPad" />
<Folder Include="Visualizers\Graph" />
<Folder Include="Visualizers\Graph\Drawing" />
<Folder Include="Visualizers\Graph\Layout" />
<Folder Include="Visualizers\Graph\Layout\SplineRouting" />
<Folder Include="Visualizers\Graph\Layout\SplineRouting\RouteGraph" />
<Folder Include="Visualizers\Graph\Layout\SplineRouting\ShortestPath" />
<Folder Include="Visualizers\Graph\Layout\Tree" />
<Folder Include="Visualizers\Graph\TreeModel" />
<Folder Include="Visualizers\Graph\ObjectGraph" />
<Folder Include="Visualizers\GridVisualizer\ValueProviders" />
<Folder Include="Visualizers\Controls" />
<Folder Include="Visualizers\Common" />
<Folder Include="Visualizers\Commands" />
<Folder Include="Visualizers\TextVisualizer" />
<Folder Include="Visualizers\Utils" />
<Folder Include="Visualizers\GridVisualizer" />
<Folder Include="Visualizers\PresentationBindings" />
<Page Include="Visualizers\Graph\ObjectGraphWindow.xaml" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework Client Profile</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.2.0">
<Visible>False</Visible>
<ProductName>.NET Framework 2.0 %28x86%29</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.0">
<Visible>False</Visible>
<ProductName>.NET Framework 3.0 %28x86%29</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>false</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" />
<Import Project="PostBuildEvent.proj" />
</Project>

133
src/AddIns/Debugger/Debugger.AddIn/Pads/ParallelPad/DrawSurface.xaml

@ -0,0 +1,133 @@ @@ -0,0 +1,133 @@
<?xml version="1.0" encoding="utf-8"?>
<UserControl
x:Class="Debugger.AddIn.Pads.ParallelPad.DrawSurface" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:Debugger.AddIn.Pads.ParallelPad"
Background="White">
<UserControl.Resources>
<LinearGradientBrush
x:Key="SilverBrushKey"
EndPoint="0,1"
StartPoint="0,0">
<LinearGradientBrush.GradientStops>
<GradientStop
Offset="0.7"
Color="White" />
<GradientStop
Offset="1"
Color="LightGray" />
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
<LinearGradientBrush
x:Key="SilverPressedBrushKey"
EndPoint="0,1"
StartPoint="0,0">
<LinearGradientBrush.GradientStops>
<GradientStop
Offset="0.3"
Color="White" />
<GradientStop
Offset="0"
Color="LightGray" />
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
<ControlTemplate
x:Key="ButtonTemplate"
TargetType="Button">
<Border
Width="28"
Height="17"
Name="TheBorder"
CornerRadius="2,2,2,2"
BorderThickness="1"
BorderBrush="LightGray">
<Canvas>
<TextBlock
Canvas.Top="2"
Canvas.Left="1"
Text="100%"
FontSize="9"
Foreground="LightGray" />
</Canvas>
</Border>
<ControlTemplate.Triggers>
<Trigger
Property="ButtonBase.IsMouseOver"
Value="True">
<Setter
TargetName="TheBorder"
Property="Background"
Value="{StaticResource SilverBrushKey}" />
<Setter
TargetName="TheBorder"
Property="BorderBrush"
Value="Silver" />
</Trigger>
<Trigger
Property="ButtonBase.IsPressed"
Value="True">
<Setter
TargetName="TheBorder"
Property="Background"
Value="{StaticResource SilverPressedBrushKey}" />
<Setter
TargetName="TheBorder"
Property="BorderBrush"
Value="Silver" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</UserControl.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition
Width="40" />
<ColumnDefinition
Width="*" />
</Grid.ColumnDefinitions>
<Canvas
Margin="3,3">
<TextBlock
Foreground="LightGray"
x:Name="PercentText"
HorizontalAlignment="Center">100%</TextBlock>
<Line
X1="0"
Y1="20"
X2="28"
Y2="20"
StrokeThickness="2"
Stroke="LightGray" />
<Slider
Canvas.Top="23"
Name="SliderControl"
Ticks="1,2,3,4,5,6,7,8,9,10"
Opacity=".4"
Value="5"
Interval="1"
TickPlacement="BottomRight"
Minimum="1"
Maximum="10"
Height="100"
Width="30"
Orientation="Vertical"
ValueChanged="SliderControl_ValueChanged" />
<Line
X1="0"
Y1="125"
X2="28"
Y2="125"
StrokeThickness="2"
Stroke="LightGray" />
<Button
Canvas.Top="130"
Name="Reset"
Click="Reset_Click"
Template="{StaticResource ButtonTemplate}" />
</Canvas>
<Canvas x:Name="drawingSurface" Grid.Column="1">
<local:ParallelStacksGraphLayout
x:Name="ParallelStacksLayout"
LayoutAlgorithmType = "Tree"
OverlapRemovalAlgorithmType = "FSA"/>
</Canvas>
</Grid>
</UserControl>

105
src/AddIns/Debugger/Debugger.AddIn/Pads/ParallelPad/DrawSurface.xaml.cs

@ -0,0 +1,105 @@ @@ -0,0 +1,105 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
namespace Debugger.AddIn.Pads.ParallelPad
{
public partial class DrawSurface : UserControl
{
Point dragStartedPoint;
TransformGroup group = new TransformGroup();
ScaleTransform zoom = new ScaleTransform();
TranslateTransform translate = new TranslateTransform();
public DrawSurface()
{
InitializeComponent();
group.Children.Add(zoom);
group.Children.Add(translate);
drawingSurface.RenderTransform = group;
this.MouseLeftButtonDown += DrawSurface_PreviewMouseLeftButtonDown;
this.MouseLeftButtonUp += DrawSurface_MouseLeftButtonUp;
}
public void SetGraph(ParallelStacksGraph graph)
{
this.ParallelStacksLayout.Graph = graph;
this.ParallelStacksLayout.Relayout();
}
#region Pan
void DrawSurface_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (e.OriginalSource is Slider || e.OriginalSource is Button)
return;
dragStartedPoint = e.GetPosition(drawingSurface);
drawingSurface.CaptureMouse();
this.PreviewMouseMove += DrawSurface_PreviewMouseMove;
e.Handled = true;
}
void DrawSurface_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
if (e.OriginalSource is Slider || e.OriginalSource is Button)
return;
drawingSurface.ReleaseMouseCapture();
this.PreviewMouseMove -= DrawSurface_PreviewMouseMove;
Cursor = Cursors.Arrow;
}
void DrawSurface_PreviewMouseMove(object sender, MouseEventArgs e)
{
if (!drawingSurface.IsMouseCaptured) return;
if (e.LeftButton == MouseButtonState.Pressed)
{
if (e.OriginalSource is Slider || e.OriginalSource is Button)
return;
Cursor = Cursors.ScrollAll;
Vector v = dragStartedPoint - e.GetPosition(drawingSurface);
translate.X = v.X / 5;
translate.Y = v.Y / 5;
e.Handled = true;
}
}
#endregion
#region Zoom
void SliderControl_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
if (e.OldValue == 0)
return;
double value = (e.NewValue / 5d) * 100;
this.PercentText.Text = string.Format("{0}%", value);
// zoom canvas
zoom.ScaleX = e.NewValue / 5d;
zoom.ScaleY = e.NewValue / 5d;
zoom.CenterX = drawingSurface.ActualWidth / 2d;
zoom.CenterY = drawingSurface.ActualHeight / 2d;
}
void Reset_Click(object sender, RoutedEventArgs e)
{
this.SliderControl.Value = 5;
}
#endregion
}
}

357
src/AddIns/Debugger/Debugger.AddIn/Pads/ParallelPad/ParallelStackPad.cs

@ -0,0 +1,357 @@ @@ -0,0 +1,357 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Dynamic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using Debugger.AddIn.TreeModel;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Debugging;
using ICSharpCode.SharpDevelop.Gui.Pads;
using ICSharpCode.SharpDevelop.Services;
namespace Debugger.AddIn.Pads.ParallelPad
{
public class ParallelStackPad : DebuggerPad
{
private DrawSurface surface;
private Process debuggedProcess;
private List<ThreadStack> currentThreadStacks = new List<ThreadStack>();
protected override void InitializeComponents()
{
surface = new DrawSurface();
}
public override object Control {
get {
return surface;
}
}
protected override void SelectProcess(Process process)
{
if (debuggedProcess != null) {
debuggedProcess.Paused -= debuggedProcess_Paused;
}
debuggedProcess = process;
if (debuggedProcess != null) {
debuggedProcess.Paused += debuggedProcess_Paused;
}
DebuggerService.DebugStarted += OnReset;
DebuggerService.DebugStopped += OnReset;
RefreshPad();
}
void OnReset(object sender, EventArgs e)
{
currentThreadStacks.Clear();
}
void debuggedProcess_Paused(object sender, ProcessEventArgs e)
{
RefreshPad();
}
public override void RefreshPad()
{
if (debuggedProcess == null || debuggedProcess.IsRunning) {
return;
}
using(new PrintTimes("Threads refresh")) {
try {
OnReset(null, EventArgs.Empty);
// create all simple ThreadStacks
foreach (Thread thread in debuggedProcess.Threads) {
if (debuggedProcess.IsPaused) {
Utils.DoEvents(debuggedProcess);
}
CreateThreadStack(thread);
}
CreateCommonStacks();
}
catch(AbortedBecauseDebuggeeResumedException) { }
catch(System.Exception) {
if (debuggedProcess == null || debuggedProcess.HasExited) {
// Process unexpectedly exited
} else {
throw;
}
}
// paint the ThreadStaks
graph = new ParallelStacksGraph();
foreach (var stack in this.currentThreadStacks)
{
if (stack == null)
continue;
if (stack.ThreadStackParent != null &&
(stack.ThreadStackChildren == null || stack.ThreadStackChildren.Length == 0))
continue;
graph.AddVertex(stack);
// add the children
AddChildren(stack);
}
surface.SetGraph(graph);
}
}
ParallelStacksGraph graph;
void AddChildren(ThreadStack parent)
{
if(parent.ThreadStackChildren == null || parent.ThreadStackChildren.Length == 0)
return;
foreach (var ts in parent.ThreadStackChildren)
{
if (ts == null) continue;
graph.AddVertex(ts);
graph.AddEdge(new ParallelStacksEdge(parent, ts));
if (ts.ThreadStackChildren == null || ts.ThreadStackChildren.Length == 0)
continue;
AddChildren(ts);
}
}
private void CreateCommonStacks()
{
// stack.ItemCollection order
// 0 -> top of stack = S.C
// 1 -> ............ = S.B
// .......................
// n -> bottom of stack = [External Methods]
// ThreadStacks with common frame
var commonFrameThreads = new Dictionary<string, List<ThreadStack>>();
bool isOver = false;
while (true) {
for (int i = currentThreadStacks.Count - 1; i >=0; --i) {
var stack = currentThreadStacks[i];
if (stack.ItemCollection.Count == 0) {
currentThreadStacks.Remove(stack);
continue;
}
}
//get all thread stacks with common start frame
foreach (var stack in currentThreadStacks) {
int count = stack.ItemCollection.Count;
dynamic frame = stack.ItemCollection[count - 1];
string fullname = frame.MethodName;
if (!commonFrameThreads.ContainsKey(fullname))
commonFrameThreads.Add(fullname, new List<ThreadStack>());
if (!commonFrameThreads[fullname].Contains(stack))
commonFrameThreads[fullname].Add(stack);
}
// for every list of common stacks, find split place and add them to currentThreadStacks
foreach (var frameName in commonFrameThreads.Keys) {
var listOfCurrentStacks = commonFrameThreads[frameName];
if (listOfCurrentStacks.Count == 1) // just skip the parents
{
isOver = true; // we finish when all are pseodo-parents: no more spliting
continue;
}
isOver = false;
// find the frameIndex where we can split
int frameIndex = 0;
string fn = string.Empty;
bool canContinue = true;
while(canContinue) {
for (int i = 0; i < listOfCurrentStacks.Count; ++i) {
var stack = listOfCurrentStacks[i];
if (stack.ItemCollection.Count == frameIndex)
{
canContinue = false;
break;
}
dynamic item = stack.ItemCollection[stack.ItemCollection.Count - frameIndex - 1];
string currentName = item.MethodName;
if (i == 0) {
fn = currentName;
continue;
}
if (fn == currentName)
continue;
else {
canContinue = false;
break;
}
}
if (canContinue)
frameIndex++;
}
// remove last [frameIndex] and create a new ThreadStack as the parent of what remained in the children
var threadIds = new List<uint>();
var parentItems = new Stack<ExpandoObject>();
int j = 0;
while (frameIndex > 0) {
for (int i = 0 ; i < listOfCurrentStacks.Count; ++i) {
var stack = listOfCurrentStacks[i];
int indexToRemove = stack.ItemCollection.Count - 1;
#if DEBUG
dynamic d_item = stack.ItemCollection[indexToRemove];
string name = d_item.MethodName;
#endif
if (i == 0)
parentItems.Push(stack.ItemCollection[indexToRemove]);
if (i == j)
threadIds.AddRange(stack.ThreadIds);
stack.ItemCollection.RemoveAt(indexToRemove);
}
j++;
frameIndex--;
}
// remove stacks with no items
for (int i = listOfCurrentStacks.Count - 1; i >= 0; --i) {
var stack = listOfCurrentStacks[i];
if (stack.ItemCollection.Count == 0)
listOfCurrentStacks.Remove(stack);
}
// create new parent stack
ThreadStack commonParent = new ThreadStack();
commonParent.ThreadIds = threadIds;
commonParent.ItemCollection = parentItems.ToObservable();
commonParent.Process = debuggedProcess;
commonParent.IsSelected = commonParent.ThreadIds.Contains(debuggedProcess.SelectedThread.ID);
// add new children
foreach (var stack in listOfCurrentStacks) {
if (stack.ItemCollection.Count == 0)
{
currentThreadStacks.Remove(stack);
continue;
}
dynamic item = stack.ItemCollection[stack.ItemCollection.Count - 1];
stack.ThreadStackParent = commonParent;
string currentName = item.MethodName;
var newList = new List<ThreadStack>();
newList.Add(stack);
commonFrameThreads.Add(currentName, newList);
}
commonParent.ThreadStackChildren = listOfCurrentStacks.ToArray();
commonFrameThreads[frameName].Clear();
commonFrameThreads[frameName].Add(commonParent);
currentThreadStacks.Add(commonParent);
// exit and retry
break;
}
if (isOver)
break;
}
}
private void CreateThreadStack(Thread thread)
{
var items = CreateItems(thread);
if (items.Count == 0)
return;
ThreadStack threadStack = new ThreadStack();
threadStack.ThreadIds = new List<uint>();
threadStack.ThreadIds.Add(thread.ID);
threadStack.Process = debuggedProcess;
currentThreadStacks.Add(threadStack);
threadStack.ItemCollection = items;
if (debuggedProcess.SelectedThread != null)
threadStack.IsSelected = threadStack.ThreadIds.Contains(debuggedProcess.SelectedThread.ID);
}
private ObservableCollection<ExpandoObject> CreateItems(Thread thread)
{
bool lastItemIsExternalMethod = false;
var result = new ObservableCollection<ExpandoObject>();
foreach (StackFrame frame in thread.GetCallstack(100)) {
dynamic obj = new ExpandoObject();
string fullName;
if (frame.HasSymbols) {
// Show the method in the list
fullName = frame.GetMethodName();
lastItemIsExternalMethod = false;
obj.FontWeight = FontWeights.Normal;
obj.Foreground = Brushes.Black;
} else {
// Show [External methods] in the list
if (lastItemIsExternalMethod) continue;
fullName = ResourceService.GetString("MainWindow.Windows.Debug.CallStack.ExternalMethods").Trim();
obj.FontWeight = FontWeights.Normal;
obj.Foreground = Brushes.Gray;
lastItemIsExternalMethod = true;
}
obj.Image = null;
obj.MethodName = fullName;
result.Add(obj);
}
Utils.DoEvents(debuggedProcess);
return result;
}
}
internal static class StackFrameExtensions
{
internal static string GetMethodName(this StackFrame frame)
{
StringBuilder name = new StringBuilder();
name.Append(frame.MethodInfo.DeclaringType.FullName);
name.Append('.');
name.Append(frame.MethodInfo.Name);
return name.ToString();
}
}
internal static class ParallelStackExtensions
{
internal static ObservableCollection<T> ToObservable<T>(this Stack<T> stack)
{
if (stack == null)
throw new NullReferenceException("Stack is null!");
var result = new ObservableCollection<T>();
while (stack.Count > 0)
result.Add(stack.Pop());
return result;
}
}
}

37
src/AddIns/Debugger/Debugger.AddIn/Pads/ParallelPad/ParallelStacksGraph.cs

@ -0,0 +1,37 @@ @@ -0,0 +1,37 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using QuickGraph;
using GraphSharp.Algorithms.Layout;
using GraphSharp.Algorithms.Layout.Contextual;
using GraphSharp.Algorithms.Layout.Simple.Tree;
using GraphSharp.Controls;
namespace Debugger.AddIn.Pads.ParallelPad
{
public class ParallelStacksEdge : QuickGraph.Edge<ThreadStack>
{
public ParallelStacksEdge(ThreadStack source, ThreadStack target) : base(source, target)
{ }
}
public class ParallelStacksGraph : BidirectionalGraph<ThreadStack, ParallelStacksEdge>
{
public ParallelStacksGraph()
{ }
}
public class ParallelStacksGraphLayout : GraphLayout<ThreadStack, ParallelStacksEdge, ParallelStacksGraph>
{
public ParallelStacksGraphLayout()
{
var par = new SimpleTreeLayoutParameters();
par.LayerGap = 30;
par.VertexGap = 50;
par.Direction = LayoutDirection.BottomToTop;
par.SpanningTreeGeneration = SpanningTreeGeneration.DFS;
this.LayoutParameters = par;
}
}
}

113
src/AddIns/Debugger/Debugger.AddIn/Pads/ParallelPad/ThreadStack.xaml

@ -0,0 +1,113 @@ @@ -0,0 +1,113 @@
<?xml version="1.0" encoding="utf-8"?>
<UserControl
x:Class="Debugger.AddIn.Pads.ParallelPad.ThreadStack" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="Auto"
Height="Auto"
Background="Transparent">
<Border
x:Name="BorderParent"
BorderBrush="Black"
BorderThickness="3"
CornerRadius="5"
Height="Auto">
<StackPanel
Background="Transparent"
Margin="-5">
<Border
Height="23"
Margin="5,5,5,0"
CornerRadius="5,5,0,0"
BorderBrush="Transparent">
<Border.Background>
<LinearGradientBrush
StartPoint="0,0.5"
EndPoint="1,0.5">
<GradientStop
Color="#FFE2F6FE"
Offset="0" />
<GradientStop
Color="White"
Offset="1" />
</LinearGradientBrush>
</Border.Background>
<TextBlock
VerticalAlignment="Center"
x:Name="HeaderText"
Margin="2"
HorizontalAlignment="Center" />
</Border>
<DataGrid
Background="Transparent"
Margin="5,0,5,5"
x:Name="datagrid"
VerticalScrollBarVisibility="Disabled"
HorizontalScrollBarVisibility="Disabled"
GridLinesVisibility="None"
RowHeight="18"
SelectionMode="Single"
SelectionUnit="FullRow"
ItemsSource="{Binding}"
AutoGenerateColumns="False"
CanUserAddRows="False"
HeadersVisibility="None"
BorderThickness="0"
MouseDoubleClick="Datagrid_MouseDoubleClick"
MouseRightButtonUp="Datagrid_MouseRightButtonUp">
<DataGrid.CellStyle>
<Style
TargetType="{x:Type DataGridCell}">
<Setter Property="Background" Value="White"/>
<Setter
Property="Focusable"
Value="false" />
<Setter
Property="BorderThickness"
Value="0" />
<Style.Triggers>
<Trigger
Property="IsSelected"
Value="True">
<!-- disable selection highlight -->
<Setter
Property="Foreground"
Value="Black" />
<Setter
Property="Background"
Value="{x:Null}" />
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Border BorderBrush="Gray" BorderThickness="0,1,1,0" Width="25" Height="22">
<Image VerticalAlignment="Center" HorizontalAlignment="Center"
Source="{Binding Image}" />
</Border>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn
Width="Auto">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Border BorderBrush="Gray" BorderThickness="0,1,0,0">
<TextBlock Margin="5,0,10,0"
VerticalAlignment="Center"
FontFamily="Khmer UI"
FontSize="12"
Text="{Binding Path=MethodName}"
FontWeight="{Binding Path=FontWeight}"
Foreground="{Binding Path=Foreground}"
/>
</Border>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</StackPanel>
</Border>
</UserControl>

154
src/AddIns/Debugger/Debugger.AddIn/Pads/ParallelPad/ThreadStack.xaml.cs

@ -0,0 +1,154 @@ @@ -0,0 +1,154 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Dynamic;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
namespace Debugger.AddIn.Pads.ParallelPad
{
public partial class ThreadStack : UserControl
{
public static SolidColorBrush SelectedBrush = new SolidColorBrush(Color.FromRgb(84, 169, 255));
public static readonly DependencyProperty IsSelectedProperty =
DependencyProperty.Register("IsSelected", typeof(bool), typeof(ThreadStack),
new FrameworkPropertyMetadata());
private ObservableCollection<ExpandoObject> itemCollection = new ObservableCollection<ExpandoObject>();
public ThreadStack()
{
InitializeComponent();
}
internal bool IsAdded { get; set; }
public Process Process { get; set; }
public bool IsSelected {
get { return (bool)GetValue(IsSelectedProperty); }
set {
if (value) {
BorderParent.BorderBrush = SelectedBrush;
BorderParent.BorderThickness = new Thickness(5);
}
else {
BorderParent.BorderBrush = Brushes.Black;
BorderParent.BorderThickness = new Thickness(3);
}
SetValue(IsSelectedProperty, value);
SelectParent(value);
}
}
public ThreadStack ThreadStackParent { get; set; }
public ThreadStack[] ThreadStackChildren { get; set; }
public List<uint> ThreadIds { get; set; }
public ObservableCollection<ExpandoObject> ItemCollection {
get {
return itemCollection;
}
set {
itemCollection = value;
this.datagrid.ItemsSource = itemCollection;
if (ThreadIds.Count > 1)
this.HeaderText.Text = ThreadIds.Count.ToString() + " Threads";
else
this.HeaderText.Text = "1 Thread";
}
}
private void SelectParent(bool isSelected)
{
var ts = this.ThreadStackParent;
while(ts != null) {
ts.IsSelected = isSelected;
ts = ts.ThreadStackParent;
}
}
void Datagrid_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
if (Process.IsRunning) return;
dynamic selectedItem = datagrid.SelectedItem;
if (selectedItem != null) {
if (ThreadIds.Count > 1) {
datagrid.ContextMenu = CreateContextMenu(selectedItem);
datagrid.ContextMenu.IsOpen = true;
}
else
{
SelectFrame(ThreadIds[0], selectedItem);
}
}
}
void SelectFrame(uint threadId, ExpandoObject selectedItem)
{
var thread = Process.Threads.Find(t => t.ID == threadId);
if (thread == null)
return;
dynamic obj = selectedItem;
Process.SelectedThread = thread;
foreach(var frame in thread.Callstack)
{
if (frame.GetMethodName() == obj.MethodName)
{
Process.SelectedThread.SelectedStackFrame = frame;
break;
}
}
Process.OnPaused();
}
void Datagrid_MouseRightButtonUp(object sender, MouseButtonEventArgs e)
{
if (Process.IsRunning) return;
dynamic selectedItem = datagrid.SelectedItem;
if (selectedItem == null)
return;
datagrid.ContextMenu = CreateContextMenu(selectedItem);
datagrid.ContextMenu.IsOpen = true;
}
ContextMenu CreateContextMenu(ExpandoObject item)
{
dynamic obj = item;
var menu = new ContextMenu();
foreach (var id in ThreadIds)
{
MenuItem m = new MenuItem();
m.IsCheckable = true;
m.IsChecked = id == Process.SelectedThread.ID;
m.Checked += delegate(object sender, RoutedEventArgs e) {
var menuItem = e.OriginalSource as MenuItem;
SelectFrame((uint)menuItem.Tag, item);
};
m.Tag = id;
m.Header = id.ToString() + ":" + obj.MethodName;
menu.Items.Add(m);
}
return menu;
}
}
}

21
src/AddIns/Debugger/Debugger.AddIn/Pads/RunningThreadsPad.cs

@ -3,7 +3,6 @@ @@ -3,7 +3,6 @@
using System;
using System.Dynamic;
using System.Threading;
using System.Windows;
using System.Windows.Data;
@ -133,9 +132,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -133,9 +132,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
thread.NameChanged += delegate {
RefreshItem(obj);
};
thread.Exited += delegate {
RemoveThread(obj);
};
thread.Exited += (s, e) => RemoveThread(e.Thread);
}
void RefreshItem(ExpandoObject obj)
@ -143,6 +140,9 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -143,6 +140,9 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
dynamic item = obj;
var thread = item.Tag as Thread;
if (thread == null)
return;
item.ID = thread.ID;
item.Tag = thread;
StackFrame location = null;
@ -156,19 +156,19 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -156,19 +156,19 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
}
switch (thread.Priority) {
case ThreadPriority.Highest:
case System.Threading.ThreadPriority.Highest:
item.Priority = ResourceService.GetString("MainWindow.Windows.Debug.Threads.Priority.Highest");
break;
case ThreadPriority.AboveNormal:
case System.Threading.ThreadPriority.AboveNormal:
item.Priority = ResourceService.GetString("MainWindow.Windows.Debug.Threads.Priority.AboveNormal");
break;
case ThreadPriority.Normal:
case System.Threading.ThreadPriority.Normal:
item.Priority = ResourceService.GetString("MainWindow.Windows.Debug.Threads.Priority.Normal");
break;
case ThreadPriority.BelowNormal:
case System.Threading.ThreadPriority.BelowNormal:
item.Priority = ResourceService.GetString("MainWindow.Windows.Debug.Threads.Priority.BelowNormal");
break;
case ThreadPriority.Lowest:
case System.Threading.ThreadPriority.Lowest:
item.Priority = ResourceService.GetString("MainWindow.Windows.Debug.Threads.Priority.Lowest");
break;
default:
@ -180,6 +180,9 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -180,6 +180,9 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
void RemoveThread(Thread thread)
{
if (thread == null || thread.HasExited)
return;
foreach (dynamic item in runningThreadsList.ItemCollection) {
if (thread.ID == item.ID) {
runningThreadsList.ItemCollection.Remove(item);

14
src/AddIns/Debugger/Debugger.Core/ThreadCollection.cs

@ -17,6 +17,20 @@ namespace Debugger @@ -17,6 +17,20 @@ namespace Debugger
set { selected = value; }
}
public Thread Find(Predicate<Thread> predicate)
{
if (predicate == null)
return null;
foreach (var thread in this)
{
if (predicate(thread))
return thread;
}
return null;
}
internal bool Contains(ICorDebugThread corThread)
{
foreach(Thread thread in this) {

BIN
src/Main/StartUp/Project/Resources/BitmapResources.resources

Binary file not shown.
Loading…
Cancel
Save