mirror of
https://github.com/Kopano-dev/kopano-ol-extension.git
synced 2023-10-10 13:37:40 +02:00
[KOE-130] Added wrapper tracing feature
This commit is contained in:
parent
879a10bef8
commit
59ad301b03
@ -388,6 +388,9 @@
|
|||||||
<Compile Include="UI\Outlook\MenuItem.cs" />
|
<Compile Include="UI\Outlook\MenuItem.cs" />
|
||||||
<Compile Include="UI\Outlook\Types.cs" />
|
<Compile Include="UI\Outlook\Types.cs" />
|
||||||
<Compile Include="Utils\CompletionTracker.cs" />
|
<Compile Include="Utils\CompletionTracker.cs" />
|
||||||
|
<Compile Include="Utils\DisposableTracer.cs" />
|
||||||
|
<Compile Include="Utils\DisposableTracerDummy.cs" />
|
||||||
|
<Compile Include="Utils\DisposableTracerFull.cs" />
|
||||||
<Compile Include="Utils\DisposableWrapper.cs" />
|
<Compile Include="Utils\DisposableWrapper.cs" />
|
||||||
<Compile Include="Utils\ImageUtils.cs" />
|
<Compile Include="Utils\ImageUtils.cs" />
|
||||||
<Compile Include="Utils\RegistryUtil.cs" />
|
<Compile Include="Utils\RegistryUtil.cs" />
|
||||||
|
@ -28,23 +28,58 @@
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private void InitializeComponent()
|
private void InitializeComponent()
|
||||||
{
|
{
|
||||||
|
System.Windows.Forms.ColumnHeader columnMethod;
|
||||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DebugDialog));
|
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DebugDialog));
|
||||||
|
System.Windows.Forms.ColumnHeader columnFile;
|
||||||
|
System.Windows.Forms.ColumnHeader columnLine;
|
||||||
this.tableMain = new System.Windows.Forms.TableLayoutPanel();
|
this.tableMain = new System.Windows.Forms.TableLayoutPanel();
|
||||||
this.flowButtons = new System.Windows.Forms.FlowLayoutPanel();
|
this.flowButtons = new System.Windows.Forms.FlowLayoutPanel();
|
||||||
this.buttonGC = new System.Windows.Forms.Button();
|
this.buttonGC = new System.Windows.Forms.Button();
|
||||||
this.buttonRefresh = new System.Windows.Forms.Button();
|
this.buttonRefresh = new System.Windows.Forms.Button();
|
||||||
this.buttonClose = new System.Windows.Forms.Button();
|
this.buttonClose = new System.Windows.Forms.Button();
|
||||||
this.buttonLog = new System.Windows.Forms.Button();
|
this.buttonLog = new System.Windows.Forms.Button();
|
||||||
|
this._tabs = new System.Windows.Forms.TabControl();
|
||||||
|
this._tabProperties = new System.Windows.Forms.TabPage();
|
||||||
this.Properties = new System.Windows.Forms.PropertyGrid();
|
this.Properties = new System.Windows.Forms.PropertyGrid();
|
||||||
|
this._tabWrapperTypes = new System.Windows.Forms.TabPage();
|
||||||
|
this.listWrapperTypes = new System.Windows.Forms.ListView();
|
||||||
|
this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||||
|
this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||||
|
this._tabWrapperLocations = new System.Windows.Forms.TabPage();
|
||||||
|
this._layoutLocations = new System.Windows.Forms.TableLayoutPanel();
|
||||||
|
this.listStackTrace = new System.Windows.Forms.ListView();
|
||||||
|
this.listWrapperLocations = new System.Windows.Forms.ListView();
|
||||||
|
this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||||
|
this.columnHeader4 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||||
|
columnMethod = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||||
|
columnFile = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||||
|
columnLine = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||||
this.tableMain.SuspendLayout();
|
this.tableMain.SuspendLayout();
|
||||||
this.flowButtons.SuspendLayout();
|
this.flowButtons.SuspendLayout();
|
||||||
|
this._tabs.SuspendLayout();
|
||||||
|
this._tabProperties.SuspendLayout();
|
||||||
|
this._tabWrapperTypes.SuspendLayout();
|
||||||
|
this._tabWrapperLocations.SuspendLayout();
|
||||||
|
this._layoutLocations.SuspendLayout();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
|
// columnMethod
|
||||||
|
//
|
||||||
|
resources.ApplyResources(columnMethod, "columnMethod");
|
||||||
|
//
|
||||||
|
// columnFile
|
||||||
|
//
|
||||||
|
resources.ApplyResources(columnFile, "columnFile");
|
||||||
|
//
|
||||||
|
// columnLine
|
||||||
|
//
|
||||||
|
resources.ApplyResources(columnLine, "columnLine");
|
||||||
|
//
|
||||||
// tableMain
|
// tableMain
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.tableMain, "tableMain");
|
resources.ApplyResources(this.tableMain, "tableMain");
|
||||||
this.tableMain.Controls.Add(this.flowButtons, 0, 1);
|
this.tableMain.Controls.Add(this.flowButtons, 0, 1);
|
||||||
this.tableMain.Controls.Add(this.Properties, 0, 0);
|
this.tableMain.Controls.Add(this._tabs, 0, 0);
|
||||||
this.tableMain.Name = "tableMain";
|
this.tableMain.Name = "tableMain";
|
||||||
//
|
//
|
||||||
// flowButtons
|
// flowButtons
|
||||||
@ -85,14 +120,109 @@
|
|||||||
this.buttonLog.UseVisualStyleBackColor = true;
|
this.buttonLog.UseVisualStyleBackColor = true;
|
||||||
this.buttonLog.Click += new System.EventHandler(this.buttonLog_Click);
|
this.buttonLog.Click += new System.EventHandler(this.buttonLog_Click);
|
||||||
//
|
//
|
||||||
|
// _tabs
|
||||||
|
//
|
||||||
|
this._tabs.Controls.Add(this._tabProperties);
|
||||||
|
this._tabs.Controls.Add(this._tabWrapperTypes);
|
||||||
|
this._tabs.Controls.Add(this._tabWrapperLocations);
|
||||||
|
resources.ApplyResources(this._tabs, "_tabs");
|
||||||
|
this._tabs.Name = "_tabs";
|
||||||
|
this._tabs.SelectedIndex = 0;
|
||||||
|
//
|
||||||
|
// _tabProperties
|
||||||
|
//
|
||||||
|
this._tabProperties.Controls.Add(this.Properties);
|
||||||
|
resources.ApplyResources(this._tabProperties, "_tabProperties");
|
||||||
|
this._tabProperties.Name = "_tabProperties";
|
||||||
|
this._tabProperties.UseVisualStyleBackColor = true;
|
||||||
|
//
|
||||||
// Properties
|
// Properties
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.Properties, "Properties");
|
|
||||||
this.Properties.DisabledItemForeColor = System.Drawing.SystemColors.ControlText;
|
this.Properties.DisabledItemForeColor = System.Drawing.SystemColors.ControlText;
|
||||||
|
resources.ApplyResources(this.Properties, "Properties");
|
||||||
this.Properties.Name = "Properties";
|
this.Properties.Name = "Properties";
|
||||||
this.Properties.PropertySort = System.Windows.Forms.PropertySort.Categorized;
|
this.Properties.PropertySort = System.Windows.Forms.PropertySort.Categorized;
|
||||||
this.Properties.ToolbarVisible = false;
|
this.Properties.ToolbarVisible = false;
|
||||||
//
|
//
|
||||||
|
// _tabWrapperTypes
|
||||||
|
//
|
||||||
|
this._tabWrapperTypes.Controls.Add(this.listWrapperTypes);
|
||||||
|
resources.ApplyResources(this._tabWrapperTypes, "_tabWrapperTypes");
|
||||||
|
this._tabWrapperTypes.Name = "_tabWrapperTypes";
|
||||||
|
this._tabWrapperTypes.UseVisualStyleBackColor = true;
|
||||||
|
//
|
||||||
|
// listWrapperTypes
|
||||||
|
//
|
||||||
|
this.listWrapperTypes.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
|
||||||
|
this.columnHeader1,
|
||||||
|
this.columnHeader2});
|
||||||
|
resources.ApplyResources(this.listWrapperTypes, "listWrapperTypes");
|
||||||
|
this.listWrapperTypes.Name = "listWrapperTypes";
|
||||||
|
this.listWrapperTypes.ShowItemToolTips = true;
|
||||||
|
this.listWrapperTypes.Sorting = System.Windows.Forms.SortOrder.Descending;
|
||||||
|
this.listWrapperTypes.UseCompatibleStateImageBehavior = false;
|
||||||
|
this.listWrapperTypes.View = System.Windows.Forms.View.Details;
|
||||||
|
//
|
||||||
|
// columnHeader1
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.columnHeader1, "columnHeader1");
|
||||||
|
//
|
||||||
|
// columnHeader2
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.columnHeader2, "columnHeader2");
|
||||||
|
//
|
||||||
|
// _tabWrapperLocations
|
||||||
|
//
|
||||||
|
this._tabWrapperLocations.Controls.Add(this._layoutLocations);
|
||||||
|
resources.ApplyResources(this._tabWrapperLocations, "_tabWrapperLocations");
|
||||||
|
this._tabWrapperLocations.Name = "_tabWrapperLocations";
|
||||||
|
this._tabWrapperLocations.UseVisualStyleBackColor = true;
|
||||||
|
//
|
||||||
|
// _layoutLocations
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this._layoutLocations, "_layoutLocations");
|
||||||
|
this._layoutLocations.Controls.Add(this.listStackTrace, 0, 1);
|
||||||
|
this._layoutLocations.Controls.Add(this.listWrapperLocations, 0, 0);
|
||||||
|
this._layoutLocations.Name = "_layoutLocations";
|
||||||
|
//
|
||||||
|
// listStackTrace
|
||||||
|
//
|
||||||
|
this.listStackTrace.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
|
||||||
|
columnMethod,
|
||||||
|
columnLine,
|
||||||
|
columnFile});
|
||||||
|
resources.ApplyResources(this.listStackTrace, "listStackTrace");
|
||||||
|
this.listStackTrace.FullRowSelect = true;
|
||||||
|
this.listStackTrace.MultiSelect = false;
|
||||||
|
this.listStackTrace.Name = "listStackTrace";
|
||||||
|
this.listStackTrace.ShowItemToolTips = true;
|
||||||
|
this.listStackTrace.UseCompatibleStateImageBehavior = false;
|
||||||
|
this.listStackTrace.View = System.Windows.Forms.View.Details;
|
||||||
|
//
|
||||||
|
// listWrapperLocations
|
||||||
|
//
|
||||||
|
this.listWrapperLocations.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
|
||||||
|
this.columnHeader3,
|
||||||
|
this.columnHeader4});
|
||||||
|
resources.ApplyResources(this.listWrapperLocations, "listWrapperLocations");
|
||||||
|
this.listWrapperLocations.FullRowSelect = true;
|
||||||
|
this.listWrapperLocations.HideSelection = false;
|
||||||
|
this.listWrapperLocations.MultiSelect = false;
|
||||||
|
this.listWrapperLocations.Name = "listWrapperLocations";
|
||||||
|
this.listWrapperLocations.ShowItemToolTips = true;
|
||||||
|
this.listWrapperLocations.Sorting = System.Windows.Forms.SortOrder.Descending;
|
||||||
|
this.listWrapperLocations.UseCompatibleStateImageBehavior = false;
|
||||||
|
this.listWrapperLocations.View = System.Windows.Forms.View.Details;
|
||||||
|
this.listWrapperLocations.SelectedIndexChanged += new System.EventHandler(this.listWrapperLocations_SelectedIndexChanged);
|
||||||
|
//
|
||||||
|
// columnHeader3
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.columnHeader3, "columnHeader3");
|
||||||
|
//
|
||||||
|
// columnHeader4
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.columnHeader4, "columnHeader4");
|
||||||
|
//
|
||||||
// DebugDialog
|
// DebugDialog
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this, "$this");
|
resources.ApplyResources(this, "$this");
|
||||||
@ -101,13 +231,16 @@
|
|||||||
this.Controls.Add(this.tableMain);
|
this.Controls.Add(this.tableMain);
|
||||||
this.MinimizeBox = false;
|
this.MinimizeBox = false;
|
||||||
this.Name = "DebugDialog";
|
this.Name = "DebugDialog";
|
||||||
this.ShowInTaskbar = false;
|
|
||||||
this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show;
|
this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show;
|
||||||
this.TopMost = true;
|
|
||||||
this.tableMain.ResumeLayout(false);
|
this.tableMain.ResumeLayout(false);
|
||||||
this.tableMain.PerformLayout();
|
this.tableMain.PerformLayout();
|
||||||
this.flowButtons.ResumeLayout(false);
|
this.flowButtons.ResumeLayout(false);
|
||||||
this.flowButtons.PerformLayout();
|
this.flowButtons.PerformLayout();
|
||||||
|
this._tabs.ResumeLayout(false);
|
||||||
|
this._tabProperties.ResumeLayout(false);
|
||||||
|
this._tabWrapperTypes.ResumeLayout(false);
|
||||||
|
this._tabWrapperLocations.ResumeLayout(false);
|
||||||
|
this._layoutLocations.ResumeLayout(false);
|
||||||
this.ResumeLayout(false);
|
this.ResumeLayout(false);
|
||||||
this.PerformLayout();
|
this.PerformLayout();
|
||||||
|
|
||||||
@ -122,5 +255,17 @@
|
|||||||
private System.Windows.Forms.Button buttonRefresh;
|
private System.Windows.Forms.Button buttonRefresh;
|
||||||
private System.Windows.Forms.Button buttonClose;
|
private System.Windows.Forms.Button buttonClose;
|
||||||
private System.Windows.Forms.Button buttonLog;
|
private System.Windows.Forms.Button buttonLog;
|
||||||
|
private System.Windows.Forms.TabControl _tabs;
|
||||||
|
private System.Windows.Forms.TabPage _tabProperties;
|
||||||
|
private System.Windows.Forms.TabPage _tabWrapperTypes;
|
||||||
|
private System.Windows.Forms.TabPage _tabWrapperLocations;
|
||||||
|
private System.Windows.Forms.ListView listWrapperTypes;
|
||||||
|
private System.Windows.Forms.ColumnHeader columnHeader1;
|
||||||
|
private System.Windows.Forms.ColumnHeader columnHeader2;
|
||||||
|
private System.Windows.Forms.TableLayoutPanel _layoutLocations;
|
||||||
|
private System.Windows.Forms.ListView listStackTrace;
|
||||||
|
private System.Windows.Forms.ListView listWrapperLocations;
|
||||||
|
private System.Windows.Forms.ColumnHeader columnHeader3;
|
||||||
|
private System.Windows.Forms.ColumnHeader columnHeader4;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,4 +1,4 @@
|
|||||||
/// Copyright 2016 Kopano b.v.
|
/// Copyright 2017 Kopano b.v.
|
||||||
///
|
///
|
||||||
/// This program is free software: you can redistribute it and/or modify
|
/// This program is free software: you can redistribute it and/or modify
|
||||||
/// it under the terms of the GNU Affero General Public License, version 3,
|
/// it under the terms of the GNU Affero General Public License, version 3,
|
||||||
@ -35,18 +35,105 @@ namespace Acacia.Features.DebugSupport
|
|||||||
{
|
{
|
||||||
public partial class DebugDialog : KopanoDialog
|
public partial class DebugDialog : KopanoDialog
|
||||||
{
|
{
|
||||||
|
private readonly DisposableTracerFull _tracer;
|
||||||
|
|
||||||
public DebugDialog()
|
public DebugDialog()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
Properties.SelectedObject = new DebugInfo();
|
Properties.SelectedObject = new DebugInfo();
|
||||||
|
|
||||||
|
_tracer = DisposableWrapper.GetTracer();
|
||||||
|
if (_tracer == null)
|
||||||
|
{
|
||||||
|
// If we don't have a wrapper tracer, hide the tabs
|
||||||
|
_tabs.SizeMode = TabSizeMode.Fixed;
|
||||||
|
_tabs.ItemSize = new Size(0, 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
listWrapperTypes.ListViewItemSorter = new WrapperCountSorter();
|
||||||
|
listWrapperLocations.ListViewItemSorter = new WrapperCountSorter();
|
||||||
|
RefreshWrappers();
|
||||||
|
|
||||||
|
// Make it a bit bigger
|
||||||
|
Width = Width + 400;
|
||||||
|
Height = Height + 200;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateFields()
|
private void UpdateFields()
|
||||||
{
|
{
|
||||||
Properties.Refresh();
|
Properties.Refresh();
|
||||||
|
RefreshWrappers();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#region Wrappers
|
||||||
|
|
||||||
|
private void RefreshWrappers()
|
||||||
|
{
|
||||||
|
// Wrapper types
|
||||||
|
listWrapperTypes.Items.Clear();
|
||||||
|
foreach(KeyValuePair<Type, int> type in _tracer.GetTypes())
|
||||||
|
{
|
||||||
|
string name = type.Key.Name;
|
||||||
|
if (type.Key.DeclaringType != null)
|
||||||
|
name = type.Key.DeclaringType.Name + "." + name;
|
||||||
|
|
||||||
|
ListViewItem item = new ListViewItem(name);
|
||||||
|
item.ToolTipText = type.Key.FullName;
|
||||||
|
item.SubItems.Add(type.Value.ToString());
|
||||||
|
listWrapperTypes.Items.Add(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
listWrapperTypes.Columns[0].Width = -2;
|
||||||
|
listWrapperTypes.Columns[1].Width = -2;
|
||||||
|
|
||||||
|
// Wrapper locations
|
||||||
|
listWrapperLocations.Items.Clear();
|
||||||
|
foreach (KeyValuePair<DisposableTracerFull.CustomTrace, int> entry in _tracer.GetLocations())
|
||||||
|
{
|
||||||
|
ListViewItem item = new ListViewItem(entry.Key.DisplayName);
|
||||||
|
item.SubItems.Add(entry.Value.ToString());
|
||||||
|
item.Tag = entry.Key;
|
||||||
|
listWrapperLocations.Items.Add(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
listWrapperLocations.Columns[0].Width = -2;
|
||||||
|
listWrapperLocations.Columns[1].Width = -2;
|
||||||
|
}
|
||||||
|
|
||||||
|
private class WrapperCountSorter : IComparer
|
||||||
|
{
|
||||||
|
public int Compare(object x, object y)
|
||||||
|
{
|
||||||
|
int ix = int.Parse(((ListViewItem)x).SubItems[1].Text);
|
||||||
|
int iy = int.Parse(((ListViewItem)y).SubItems[1].Text);
|
||||||
|
return iy - ix;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void listWrapperLocations_SelectedIndexChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
listStackTrace.Items.Clear();
|
||||||
|
if (listWrapperLocations.SelectedItems.Count > 0)
|
||||||
|
{
|
||||||
|
DisposableTracerFull.CustomTrace trace = (DisposableTracerFull.CustomTrace)listWrapperLocations.SelectedItems[0].Tag;
|
||||||
|
foreach(DisposableTracerFull.CustomFrame frame in trace.Frames)
|
||||||
|
{
|
||||||
|
ListViewItem item = new ListViewItem(frame.MethodName);
|
||||||
|
item.SubItems.Add(frame.LineNumber.ToString());
|
||||||
|
item.SubItems.Add(frame.FileName ?? "");
|
||||||
|
listStackTrace.Items.Add(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
foreach (ColumnHeader header in listStackTrace.Columns)
|
||||||
|
header.Width = -2;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Cycling
|
||||||
|
|
||||||
private class DebugCycleInfo
|
private class DebugCycleInfo
|
||||||
{
|
{
|
||||||
private int cycleIndex = 0;
|
private int cycleIndex = 0;
|
||||||
@ -108,6 +195,12 @@ namespace Acacia.Features.DebugSupport
|
|||||||
|
|
||||||
private DebugCycleInfo cycle;
|
private DebugCycleInfo cycle;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Runs the specific number of cycles. In each cycle the GAB is resynced. This is to test
|
||||||
|
/// memory errors, which show most frequently when using the GAB, as that touches most of
|
||||||
|
/// the code.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="count">The number of cycles to run</param>
|
||||||
internal void DebugCycle(int count)
|
internal void DebugCycle(int count)
|
||||||
{
|
{
|
||||||
GAB.FeatureGAB gab = ThisAddIn.Instance.GetFeature<GAB.FeatureGAB>();
|
GAB.FeatureGAB gab = ThisAddIn.Instance.GetFeature<GAB.FeatureGAB>();
|
||||||
@ -118,6 +211,8 @@ namespace Acacia.Features.DebugSupport
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
#region Logging
|
#region Logging
|
||||||
|
|
||||||
private const string INDENT = "+";
|
private const string INDENT = "+";
|
||||||
|
@ -117,11 +117,35 @@
|
|||||||
<resheader name="writer">
|
<resheader name="writer">
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
|
<metadata name="columnMethod.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>False</value>
|
||||||
|
</metadata>
|
||||||
|
<data name="columnMethod.Text" xml:space="preserve">
|
||||||
|
<value>Method</value>
|
||||||
|
</data>
|
||||||
|
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||||
|
<data name="columnMethod.Width" type="System.Int32, mscorlib">
|
||||||
|
<value>44</value>
|
||||||
|
</data>
|
||||||
|
<metadata name="columnFile.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>False</value>
|
||||||
|
</metadata>
|
||||||
|
<data name="columnFile.Text" xml:space="preserve">
|
||||||
|
<value>File</value>
|
||||||
|
</data>
|
||||||
|
<data name="columnFile.Width" type="System.Int32, mscorlib">
|
||||||
|
<value>44</value>
|
||||||
|
</data>
|
||||||
|
<metadata name="columnLine.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>False</value>
|
||||||
|
</metadata>
|
||||||
|
<data name="columnLine.Text" xml:space="preserve">
|
||||||
|
<value>Line</value>
|
||||||
|
</data>
|
||||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||||
<data name="tableMain.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
<data name="tableMain.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||||
<value>Top, Bottom, Left, Right</value>
|
<value>Top, Bottom, Left, Right</value>
|
||||||
</data>
|
</data>
|
||||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
|
||||||
<data name="tableMain.AutoSize" type="System.Boolean, mscorlib">
|
<data name="tableMain.AutoSize" type="System.Boolean, mscorlib">
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
</data>
|
</data>
|
||||||
@ -137,18 +161,333 @@
|
|||||||
<data name="flowButtons.AutoSize" type="System.Boolean, mscorlib">
|
<data name="flowButtons.AutoSize" type="System.Boolean, mscorlib">
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name=">>buttonGC.Name" xml:space="preserve">
|
||||||
|
<value>buttonGC</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>buttonGC.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>buttonGC.Parent" xml:space="preserve">
|
||||||
|
<value>flowButtons</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>buttonGC.ZOrder" xml:space="preserve">
|
||||||
|
<value>0</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>buttonRefresh.Name" xml:space="preserve">
|
||||||
|
<value>buttonRefresh</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>buttonRefresh.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>buttonRefresh.Parent" xml:space="preserve">
|
||||||
|
<value>flowButtons</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>buttonRefresh.ZOrder" xml:space="preserve">
|
||||||
|
<value>1</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>buttonClose.Name" xml:space="preserve">
|
||||||
|
<value>buttonClose</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>buttonClose.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>buttonClose.Parent" xml:space="preserve">
|
||||||
|
<value>flowButtons</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>buttonClose.ZOrder" xml:space="preserve">
|
||||||
|
<value>2</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>buttonLog.Name" xml:space="preserve">
|
||||||
|
<value>buttonLog</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>buttonLog.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>buttonLog.Parent" xml:space="preserve">
|
||||||
|
<value>flowButtons</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>buttonLog.ZOrder" xml:space="preserve">
|
||||||
|
<value>3</value>
|
||||||
|
</data>
|
||||||
|
<data name="flowButtons.FlowDirection" type="System.Windows.Forms.FlowDirection, System.Windows.Forms">
|
||||||
|
<value>RightToLeft</value>
|
||||||
|
</data>
|
||||||
|
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
|
<data name="flowButtons.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>4, 703</value>
|
||||||
|
</data>
|
||||||
|
<data name="flowButtons.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||||
|
<value>4, 3, 4, 3</value>
|
||||||
|
</data>
|
||||||
|
<data name="flowButtons.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>615, 64</value>
|
||||||
|
</data>
|
||||||
|
<data name="flowButtons.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>1</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>flowButtons.Name" xml:space="preserve">
|
||||||
|
<value>flowButtons</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>flowButtons.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>flowButtons.Parent" xml:space="preserve">
|
||||||
|
<value>tableMain</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>flowButtons.ZOrder" xml:space="preserve">
|
||||||
|
<value>0</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>Properties.Name" xml:space="preserve">
|
||||||
|
<value>Properties</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>Properties.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.PropertyGrid, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>Properties.Parent" xml:space="preserve">
|
||||||
|
<value>_tabProperties</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>Properties.ZOrder" xml:space="preserve">
|
||||||
|
<value>0</value>
|
||||||
|
</data>
|
||||||
|
<data name="_tabProperties.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>4, 33</value>
|
||||||
|
</data>
|
||||||
|
<data name="_tabProperties.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||||
|
<value>3, 3, 3, 3</value>
|
||||||
|
</data>
|
||||||
|
<data name="_tabProperties.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>609, 657</value>
|
||||||
|
</data>
|
||||||
|
<data name="_tabProperties.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>0</value>
|
||||||
|
</data>
|
||||||
|
<data name="_tabProperties.Text" xml:space="preserve">
|
||||||
|
<value>General</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>_tabProperties.Name" xml:space="preserve">
|
||||||
|
<value>_tabProperties</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>_tabProperties.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>_tabProperties.Parent" xml:space="preserve">
|
||||||
|
<value>_tabs</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>_tabProperties.ZOrder" xml:space="preserve">
|
||||||
|
<value>0</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>listWrapperTypes.Name" xml:space="preserve">
|
||||||
|
<value>listWrapperTypes</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>listWrapperTypes.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.ListView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>listWrapperTypes.Parent" xml:space="preserve">
|
||||||
|
<value>_tabWrapperTypes</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>listWrapperTypes.ZOrder" xml:space="preserve">
|
||||||
|
<value>0</value>
|
||||||
|
</data>
|
||||||
|
<data name="_tabWrapperTypes.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>4, 33</value>
|
||||||
|
</data>
|
||||||
|
<data name="_tabWrapperTypes.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||||
|
<value>3, 3, 3, 3</value>
|
||||||
|
</data>
|
||||||
|
<data name="_tabWrapperTypes.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>609, 657</value>
|
||||||
|
</data>
|
||||||
|
<data name="_tabWrapperTypes.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>1</value>
|
||||||
|
</data>
|
||||||
|
<data name="_tabWrapperTypes.Text" xml:space="preserve">
|
||||||
|
<value>Wrapper types</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>_tabWrapperTypes.Name" xml:space="preserve">
|
||||||
|
<value>_tabWrapperTypes</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>_tabWrapperTypes.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>_tabWrapperTypes.Parent" xml:space="preserve">
|
||||||
|
<value>_tabs</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>_tabWrapperTypes.ZOrder" xml:space="preserve">
|
||||||
|
<value>1</value>
|
||||||
|
</data>
|
||||||
|
<data name="_layoutLocations.ColumnCount" type="System.Int32, mscorlib">
|
||||||
|
<value>1</value>
|
||||||
|
</data>
|
||||||
|
<data name="listStackTrace.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||||
|
<value>Fill</value>
|
||||||
|
</data>
|
||||||
|
<data name="listStackTrace.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>3, 328</value>
|
||||||
|
</data>
|
||||||
|
<data name="listStackTrace.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>597, 320</value>
|
||||||
|
</data>
|
||||||
|
<data name="listStackTrace.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>3</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>listStackTrace.Name" xml:space="preserve">
|
||||||
|
<value>listStackTrace</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>listStackTrace.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.ListView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>listStackTrace.Parent" xml:space="preserve">
|
||||||
|
<value>_layoutLocations</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>listStackTrace.ZOrder" xml:space="preserve">
|
||||||
|
<value>0</value>
|
||||||
|
</data>
|
||||||
|
<data name="listWrapperLocations.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||||
|
<value>Fill</value>
|
||||||
|
</data>
|
||||||
|
<data name="listWrapperLocations.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>3, 3</value>
|
||||||
|
</data>
|
||||||
|
<data name="listWrapperLocations.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>597, 319</value>
|
||||||
|
</data>
|
||||||
|
<data name="listWrapperLocations.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>2</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>listWrapperLocations.Name" xml:space="preserve">
|
||||||
|
<value>listWrapperLocations</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>listWrapperLocations.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.ListView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>listWrapperLocations.Parent" xml:space="preserve">
|
||||||
|
<value>_layoutLocations</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>listWrapperLocations.ZOrder" xml:space="preserve">
|
||||||
|
<value>1</value>
|
||||||
|
</data>
|
||||||
|
<data name="_layoutLocations.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||||
|
<value>Fill</value>
|
||||||
|
</data>
|
||||||
|
<data name="_layoutLocations.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>3, 3</value>
|
||||||
|
</data>
|
||||||
|
<data name="_layoutLocations.RowCount" type="System.Int32, mscorlib">
|
||||||
|
<value>2</value>
|
||||||
|
</data>
|
||||||
|
<data name="_layoutLocations.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>603, 651</value>
|
||||||
|
</data>
|
||||||
|
<data name="_layoutLocations.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>2</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>_layoutLocations.Name" xml:space="preserve">
|
||||||
|
<value>_layoutLocations</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>_layoutLocations.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>_layoutLocations.Parent" xml:space="preserve">
|
||||||
|
<value>_tabWrapperLocations</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>_layoutLocations.ZOrder" xml:space="preserve">
|
||||||
|
<value>0</value>
|
||||||
|
</data>
|
||||||
|
<data name="_layoutLocations.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
|
||||||
|
<value><?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="listStackTrace" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="listWrapperLocations" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,100,Absolute,20" /><Rows Styles="Percent,50,Percent,50" /></TableLayoutSettings></value>
|
||||||
|
</data>
|
||||||
|
<data name="_tabWrapperLocations.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>4, 33</value>
|
||||||
|
</data>
|
||||||
|
<data name="_tabWrapperLocations.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||||
|
<value>3, 3, 3, 3</value>
|
||||||
|
</data>
|
||||||
|
<data name="_tabWrapperLocations.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>609, 657</value>
|
||||||
|
</data>
|
||||||
|
<data name="_tabWrapperLocations.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>2</value>
|
||||||
|
</data>
|
||||||
|
<data name="_tabWrapperLocations.Text" xml:space="preserve">
|
||||||
|
<value>Wrapper locations</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>_tabWrapperLocations.Name" xml:space="preserve">
|
||||||
|
<value>_tabWrapperLocations</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>_tabWrapperLocations.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>_tabWrapperLocations.Parent" xml:space="preserve">
|
||||||
|
<value>_tabs</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>_tabWrapperLocations.ZOrder" xml:space="preserve">
|
||||||
|
<value>2</value>
|
||||||
|
</data>
|
||||||
|
<data name="_tabs.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||||
|
<value>Fill</value>
|
||||||
|
</data>
|
||||||
|
<data name="_tabs.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>3, 3</value>
|
||||||
|
</data>
|
||||||
|
<data name="_tabs.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>617, 694</value>
|
||||||
|
</data>
|
||||||
|
<data name="_tabs.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>3</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>_tabs.Name" xml:space="preserve">
|
||||||
|
<value>_tabs</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>_tabs.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>_tabs.Parent" xml:space="preserve">
|
||||||
|
<value>tableMain</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>_tabs.ZOrder" xml:space="preserve">
|
||||||
|
<value>1</value>
|
||||||
|
</data>
|
||||||
|
<data name="tableMain.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>0, 0</value>
|
||||||
|
</data>
|
||||||
|
<data name="tableMain.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||||
|
<value>4, 3, 4, 3</value>
|
||||||
|
</data>
|
||||||
|
<data name="tableMain.RowCount" type="System.Int32, mscorlib">
|
||||||
|
<value>2</value>
|
||||||
|
</data>
|
||||||
|
<data name="tableMain.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>623, 770</value>
|
||||||
|
</data>
|
||||||
|
<data name="tableMain.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>0</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>tableMain.Name" xml:space="preserve">
|
||||||
|
<value>tableMain</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>tableMain.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>tableMain.Parent" xml:space="preserve">
|
||||||
|
<value>$this</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>tableMain.ZOrder" xml:space="preserve">
|
||||||
|
<value>0</value>
|
||||||
|
</data>
|
||||||
|
<data name="tableMain.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
|
||||||
|
<value><?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="flowButtons" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="_tabs" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,100" /><Rows Styles="Percent,100,AutoSize,0,Absolute,20" /></TableLayoutSettings></value>
|
||||||
|
</data>
|
||||||
<data name="buttonGC.AutoSize" type="System.Boolean, mscorlib">
|
<data name="buttonGC.AutoSize" type="System.Boolean, mscorlib">
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
</data>
|
</data>
|
||||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
|
||||||
<data name="buttonGC.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="buttonGC.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>352, 4</value>
|
<value>483, 6</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="buttonGC.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
<data name="buttonGC.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||||
<value>4, 4, 4, 4</value>
|
<value>6, 6, 6, 6</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="buttonGC.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="buttonGC.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>91, 33</value>
|
<value>126, 52</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="buttonGC.TabIndex" type="System.Int32, mscorlib">
|
<data name="buttonGC.TabIndex" type="System.Int32, mscorlib">
|
||||||
<value>0</value>
|
<value>0</value>
|
||||||
@ -172,13 +511,13 @@
|
|||||||
<value>True</value>
|
<value>True</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="buttonRefresh.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="buttonRefresh.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>253, 4</value>
|
<value>346, 6</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="buttonRefresh.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
<data name="buttonRefresh.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||||
<value>4, 4, 4, 4</value>
|
<value>6, 6, 6, 6</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="buttonRefresh.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="buttonRefresh.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>91, 33</value>
|
<value>125, 52</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="buttonRefresh.TabIndex" type="System.Int32, mscorlib">
|
<data name="buttonRefresh.TabIndex" type="System.Int32, mscorlib">
|
||||||
<value>1</value>
|
<value>1</value>
|
||||||
@ -202,13 +541,13 @@
|
|||||||
<value>True</value>
|
<value>True</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="buttonClose.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="buttonClose.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>145, 4</value>
|
<value>196, 6</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="buttonClose.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
<data name="buttonClose.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||||
<value>4, 4, 4, 4</value>
|
<value>6, 6, 6, 6</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="buttonClose.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="buttonClose.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>100, 33</value>
|
<value>138, 52</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="buttonClose.TabIndex" type="System.Int32, mscorlib">
|
<data name="buttonClose.TabIndex" type="System.Int32, mscorlib">
|
||||||
<value>2</value>
|
<value>2</value>
|
||||||
@ -232,13 +571,13 @@
|
|||||||
<value>True</value>
|
<value>True</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="buttonLog.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="buttonLog.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>62, 4</value>
|
<value>81, 6</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="buttonLog.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
<data name="buttonLog.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||||
<value>4, 4, 4, 4</value>
|
<value>6, 6, 6, 6</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="buttonLog.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="buttonLog.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>75, 33</value>
|
<value>103, 52</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="buttonLog.TabIndex" type="System.Int32, mscorlib">
|
<data name="buttonLog.TabIndex" type="System.Int32, mscorlib">
|
||||||
<value>3</value>
|
<value>3</value>
|
||||||
@ -258,47 +597,20 @@
|
|||||||
<data name=">>buttonLog.ZOrder" xml:space="preserve">
|
<data name=">>buttonLog.ZOrder" xml:space="preserve">
|
||||||
<value>3</value>
|
<value>3</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="flowButtons.FlowDirection" type="System.Windows.Forms.FlowDirection, System.Windows.Forms">
|
<data name="Properties.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||||
<value>RightToLeft</value>
|
<value>Fill</value>
|
||||||
</data>
|
|
||||||
<data name="flowButtons.Location" type="System.Drawing.Point, System.Drawing">
|
|
||||||
<value>3, 470</value>
|
|
||||||
</data>
|
|
||||||
<data name="flowButtons.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
|
||||||
<value>3, 2, 3, 2</value>
|
|
||||||
</data>
|
|
||||||
<data name="flowButtons.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>447, 41</value>
|
|
||||||
</data>
|
|
||||||
<data name="flowButtons.TabIndex" type="System.Int32, mscorlib">
|
|
||||||
<value>1</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>flowButtons.Name" xml:space="preserve">
|
|
||||||
<value>flowButtons</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>flowButtons.Type" xml:space="preserve">
|
|
||||||
<value>System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>flowButtons.Parent" xml:space="preserve">
|
|
||||||
<value>tableMain</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>flowButtons.ZOrder" xml:space="preserve">
|
|
||||||
<value>0</value>
|
|
||||||
</data>
|
|
||||||
<data name="Properties.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
|
||||||
<value>Top, Bottom, Left, Right</value>
|
|
||||||
</data>
|
</data>
|
||||||
<data name="Properties.HelpVisible" type="System.Boolean, mscorlib">
|
<data name="Properties.HelpVisible" type="System.Boolean, mscorlib">
|
||||||
<value>False</value>
|
<value>False</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Properties.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="Properties.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>3, 2</value>
|
<value>3, 3</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Properties.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
<data name="Properties.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||||
<value>3, 2, 3, 2</value>
|
<value>4, 3, 4, 3</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Properties.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="Properties.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>447, 464</value>
|
<value>603, 651</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Properties.TabIndex" type="System.Int32, mscorlib">
|
<data name="Properties.TabIndex" type="System.Int32, mscorlib">
|
||||||
<value>2</value>
|
<value>2</value>
|
||||||
@ -310,55 +622,73 @@
|
|||||||
<value>System.Windows.Forms.PropertyGrid, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Windows.Forms.PropertyGrid, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>Properties.Parent" xml:space="preserve">
|
<data name=">>Properties.Parent" xml:space="preserve">
|
||||||
<value>tableMain</value>
|
<value>_tabProperties</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>Properties.ZOrder" xml:space="preserve">
|
<data name=">>Properties.ZOrder" xml:space="preserve">
|
||||||
<value>1</value>
|
|
||||||
</data>
|
|
||||||
<data name="tableMain.Location" type="System.Drawing.Point, System.Drawing">
|
|
||||||
<value>0, 0</value>
|
|
||||||
</data>
|
|
||||||
<data name="tableMain.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
|
||||||
<value>3, 2, 3, 2</value>
|
|
||||||
</data>
|
|
||||||
<data name="tableMain.RowCount" type="System.Int32, mscorlib">
|
|
||||||
<value>2</value>
|
|
||||||
</data>
|
|
||||||
<data name="tableMain.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>453, 513</value>
|
|
||||||
</data>
|
|
||||||
<data name="tableMain.TabIndex" type="System.Int32, mscorlib">
|
|
||||||
<value>0</value>
|
<value>0</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>tableMain.Name" xml:space="preserve">
|
<data name="listWrapperTypes.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||||
<value>tableMain</value>
|
<value>Fill</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>tableMain.Type" xml:space="preserve">
|
<data name="listWrapperTypes.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>3, 3</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>tableMain.Parent" xml:space="preserve">
|
<data name="listWrapperTypes.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>$this</value>
|
<value>603, 651</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>tableMain.ZOrder" xml:space="preserve">
|
<data name="listWrapperTypes.TabIndex" type="System.Int32, mscorlib">
|
||||||
<value>0</value>
|
<value>0</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="tableMain.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
|
<data name=">>listWrapperTypes.Name" xml:space="preserve">
|
||||||
<value><?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="flowButtons" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="Properties" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,100" /><Rows Styles="Percent,100,AutoSize,0" /></TableLayoutSettings></value>
|
<value>listWrapperTypes</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>listWrapperTypes.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.ListView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>listWrapperTypes.Parent" xml:space="preserve">
|
||||||
|
<value>_tabWrapperTypes</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>listWrapperTypes.ZOrder" xml:space="preserve">
|
||||||
|
<value>0</value>
|
||||||
|
</data>
|
||||||
|
<data name="columnHeader1.Text" xml:space="preserve">
|
||||||
|
<value>Type</value>
|
||||||
|
</data>
|
||||||
|
<data name="columnHeader1.Width" type="System.Int32, mscorlib">
|
||||||
|
<value>44</value>
|
||||||
|
</data>
|
||||||
|
<data name="columnHeader2.Text" xml:space="preserve">
|
||||||
|
<value>Count</value>
|
||||||
|
</data>
|
||||||
|
<data name="columnHeader2.Width" type="System.Int32, mscorlib">
|
||||||
|
<value>44</value>
|
||||||
|
</data>
|
||||||
|
<data name="columnHeader3.Text" xml:space="preserve">
|
||||||
|
<value>Type</value>
|
||||||
|
</data>
|
||||||
|
<data name="columnHeader3.Width" type="System.Int32, mscorlib">
|
||||||
|
<value>44</value>
|
||||||
|
</data>
|
||||||
|
<data name="columnHeader4.Text" xml:space="preserve">
|
||||||
|
<value>Count</value>
|
||||||
|
</data>
|
||||||
|
<data name="columnHeader4.Width" type="System.Int32, mscorlib">
|
||||||
|
<value>44</value>
|
||||||
</data>
|
</data>
|
||||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||||
<value>8, 16</value>
|
<value>11, 24</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="$this.AutoSize" type="System.Boolean, mscorlib">
|
<data name="$this.AutoSize" type="System.Boolean, mscorlib">
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>453, 511</value>
|
<value>623, 766</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||||
<value>3, 2, 3, 2</value>
|
<value>4, 3, 4, 3</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
|
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
|
||||||
<value>CenterParent</value>
|
<value>CenterParent</value>
|
||||||
@ -366,10 +696,52 @@
|
|||||||
<data name="$this.Text" xml:space="preserve">
|
<data name="$this.Text" xml:space="preserve">
|
||||||
<value>Debug</value>
|
<value>Debug</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name=">>columnMethod.Name" xml:space="preserve">
|
||||||
|
<value>columnMethod</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>columnMethod.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>columnFile.Name" xml:space="preserve">
|
||||||
|
<value>columnFile</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>columnFile.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>columnLine.Name" xml:space="preserve">
|
||||||
|
<value>columnLine</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>columnLine.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>columnHeader1.Name" xml:space="preserve">
|
||||||
|
<value>columnHeader1</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>columnHeader1.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>columnHeader2.Name" xml:space="preserve">
|
||||||
|
<value>columnHeader2</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>columnHeader2.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>columnHeader3.Name" xml:space="preserve">
|
||||||
|
<value>columnHeader3</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>columnHeader3.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>columnHeader4.Name" xml:space="preserve">
|
||||||
|
<value>columnHeader4</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>columnHeader4.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
<data name=">>$this.Name" xml:space="preserve">
|
<data name=">>$this.Name" xml:space="preserve">
|
||||||
<value>DebugDialog</value>
|
<value>DebugDialog</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>$this.Type" xml:space="preserve">
|
<data name=">>$this.Type" xml:space="preserve">
|
||||||
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>Acacia.UI.KopanoDialog, Kopano, Version=0.1.0.0, Culture=neutral, PublicKeyToken=null</value>
|
||||||
</data>
|
</data>
|
||||||
</root>
|
</root>
|
@ -273,7 +273,7 @@ namespace Acacia.Features.DebugSupport
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Helpers
|
#region Helpers
|
||||||
|
|
||||||
private string TimeToString(Stopwatch time)
|
private string TimeToString(Stopwatch time)
|
||||||
{
|
{
|
||||||
@ -297,6 +297,6 @@ namespace Acacia.Features.DebugSupport
|
|||||||
return string.Format("{0:n1} {1}", dValue, SizeSuffixes[i]);
|
return string.Format("{0:n1} {1}", dValue, SizeSuffixes[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -107,6 +107,15 @@ namespace Acacia
|
|||||||
}
|
}
|
||||||
private static readonly BoolOption COM_RELEASE = new BoolOption("COMRelease", true);
|
private static readonly BoolOption COM_RELEASE = new BoolOption("COMRelease", true);
|
||||||
|
|
||||||
|
[AcaciaOption("Enables tracing of wrapper allocation. Should only be enabled for debugging, as it's very " +
|
||||||
|
"resource intensive.")]
|
||||||
|
public bool WrapperTrace
|
||||||
|
{
|
||||||
|
get { return GetOption(null, WRAPPER_TRACE); }
|
||||||
|
set { SetOption(null, WRAPPER_TRACE, value); }
|
||||||
|
}
|
||||||
|
private static readonly BoolOption WRAPPER_TRACE = new BoolOption("WrapperTrace", false);
|
||||||
|
|
||||||
[AcaciaOption("Enables or disables logging completely.")]
|
[AcaciaOption("Enables or disables logging completely.")]
|
||||||
public bool Logging
|
public bool Logging
|
||||||
{
|
{
|
||||||
|
@ -0,0 +1,15 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Acacia.Utils
|
||||||
|
{
|
||||||
|
public interface DisposableTracer
|
||||||
|
{
|
||||||
|
void Created(DisposableWrapper wrapper);
|
||||||
|
void Deleted(DisposableWrapper wrapper, bool wasDisposed);
|
||||||
|
void Disposed(DisposableWrapper wrapper);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,23 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Acacia.Utils
|
||||||
|
{
|
||||||
|
public class DisposableTracerDummy : DisposableTracer
|
||||||
|
{
|
||||||
|
public void Created(DisposableWrapper wrapper)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Deleted(DisposableWrapper wrapper, bool wasDisposed)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Disposed(DisposableWrapper wrapper)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,182 @@
|
|||||||
|
using Acacia.Stubs.OutlookWrappers;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Concurrent;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Reflection;
|
||||||
|
|
||||||
|
namespace Acacia.Utils
|
||||||
|
{
|
||||||
|
public class DisposableTracerFull : DisposableTracer
|
||||||
|
{
|
||||||
|
public class CustomFrame
|
||||||
|
{
|
||||||
|
private readonly StackFrame _frame;
|
||||||
|
|
||||||
|
public CustomFrame(StackFrame stackFrame)
|
||||||
|
{
|
||||||
|
this._frame = stackFrame;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string MethodName
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
// Make the qualified method name
|
||||||
|
string name = _frame.GetMethod().Name;
|
||||||
|
Type t = _frame.GetMethod().DeclaringType;
|
||||||
|
while (t != null)
|
||||||
|
{
|
||||||
|
name = t.Name + "." + name;
|
||||||
|
t = t.DeclaringType;
|
||||||
|
}
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string FileName
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _frame.GetFileName();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int LineNumber
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _frame.GetFileLineNumber();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
|
||||||
|
// Add any file information
|
||||||
|
string location = "";
|
||||||
|
if (_frame.GetFileName() != null)
|
||||||
|
{
|
||||||
|
location += " @ " + _frame.GetFileName();
|
||||||
|
location += ":" + _frame.GetFileLineNumber();
|
||||||
|
}
|
||||||
|
|
||||||
|
return MethodName + location + "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class CustomTrace : IComparable<CustomTrace>
|
||||||
|
{
|
||||||
|
private static bool fullTrace = false;
|
||||||
|
private readonly StackTrace _stackTrace;
|
||||||
|
private readonly CustomFrame[] _frames;
|
||||||
|
private int _nameIndex;
|
||||||
|
|
||||||
|
public CustomTrace(StackTrace stackTrace)
|
||||||
|
{
|
||||||
|
this._stackTrace = stackTrace;
|
||||||
|
|
||||||
|
// Find a useful name to display
|
||||||
|
StackFrame[] frames = stackTrace.GetFrames();
|
||||||
|
for (_nameIndex = 0; _nameIndex < frames.Length; ++_nameIndex)
|
||||||
|
{
|
||||||
|
StackFrame frame = frames[_nameIndex];
|
||||||
|
if (!IsCreationMethod(frame.GetMethod()))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
int startIndex = fullTrace ? 0 : _nameIndex;
|
||||||
|
|
||||||
|
// Create a custom trace from the frames
|
||||||
|
_frames = new CustomFrame[stackTrace.FrameCount - startIndex];
|
||||||
|
for (int i = 0; i < _frames.Length; ++i)
|
||||||
|
_frames[i] = new CustomFrame(frames[i + startIndex]);
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool IsCreationMethod(MethodBase method)
|
||||||
|
{
|
||||||
|
// Any method in Mapping or Wrappers is purely for creation
|
||||||
|
if (method.DeclaringType == typeof(Mapping) ||
|
||||||
|
method.DeclaringType == typeof(Stubs.Wrappers))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
// As is any ctor in OutlookWrappers. Methods there aren't, as they might created a
|
||||||
|
// wrapper for a property
|
||||||
|
if (method.IsConstructor &&
|
||||||
|
method.DeclaringType.Namespace == "Acacia.Stubs.OutlookWrappers")
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
string s = "";
|
||||||
|
foreach (CustomFrame frame in _frames)
|
||||||
|
s += frame.ToString();
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool Equals(object obj)
|
||||||
|
{
|
||||||
|
return ToString().Equals(obj.ToString());
|
||||||
|
}
|
||||||
|
|
||||||
|
public override int GetHashCode()
|
||||||
|
{
|
||||||
|
return ToString().GetHashCode();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int CompareTo(CustomTrace other)
|
||||||
|
{
|
||||||
|
return ToString().CompareTo(other.ToString());
|
||||||
|
}
|
||||||
|
|
||||||
|
public string DisplayName
|
||||||
|
{
|
||||||
|
get { return _frames[fullTrace ? _nameIndex : 0].MethodName; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public CustomFrame[] Frames
|
||||||
|
{
|
||||||
|
get { return _frames; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private readonly ConcurrentDictionary<Type, int> _types = new ConcurrentDictionary<Type, int>();
|
||||||
|
private readonly ConcurrentDictionary<CustomTrace, int> _locations = new ConcurrentDictionary<CustomTrace, int>();
|
||||||
|
|
||||||
|
public void Created(DisposableWrapper wrapper)
|
||||||
|
{
|
||||||
|
_types.AddOrUpdate(wrapper.GetType(), 1, (i, value) => value + 1);
|
||||||
|
_locations.AddOrUpdate(new CustomTrace(wrapper.StackTrace), 1, (i, value) => value + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Deleted(DisposableWrapper wrapper, bool wasDisposed)
|
||||||
|
{
|
||||||
|
if (!wasDisposed)
|
||||||
|
{
|
||||||
|
_types.AddOrUpdate(wrapper.GetType(), 0, (i, value) => value - 1);
|
||||||
|
_locations.AddOrUpdate(new CustomTrace(wrapper.StackTrace), 0, (i, value) => value - 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Disposed(DisposableWrapper wrapper)
|
||||||
|
{
|
||||||
|
_types.AddOrUpdate(wrapper.GetType(), 0, (i, value) => value - 1);
|
||||||
|
_locations.AddOrUpdate(new CustomTrace(wrapper.StackTrace), 0, (i, value) => value - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public IEnumerable<KeyValuePair<Type, int>> GetTypes()
|
||||||
|
{
|
||||||
|
return _types;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IEnumerable<KeyValuePair<CustomTrace, int>> GetLocations()
|
||||||
|
{
|
||||||
|
return _locations;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -26,12 +26,28 @@ namespace Acacia.Utils
|
|||||||
{
|
{
|
||||||
abstract public class DisposableWrapper : IDisposable
|
abstract public class DisposableWrapper : IDisposable
|
||||||
{
|
{
|
||||||
private static Dictionary<Type, int> typeCounts = new Dictionary<Type, int>();
|
private static DisposableTracer tracer = InitTracer();
|
||||||
|
|
||||||
|
private static DisposableTracer InitTracer()
|
||||||
|
{
|
||||||
|
if (GlobalOptions.INSTANCE.WrapperTrace)
|
||||||
|
return new DisposableTracerFull();
|
||||||
|
return new DisposableTracerDummy();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static DisposableTracerFull GetTracer()
|
||||||
|
{
|
||||||
|
return tracer as DisposableTracerFull;
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool _isDisposed;
|
||||||
|
public readonly System.Diagnostics.StackTrace StackTrace;
|
||||||
|
|
||||||
protected DisposableWrapper()
|
protected DisposableWrapper()
|
||||||
{
|
{
|
||||||
Interlocked.Increment(ref Statistics.CreatedWrappers);
|
Interlocked.Increment(ref Statistics.CreatedWrappers);
|
||||||
this._createdTrace = new System.Diagnostics.StackTrace();
|
this.StackTrace = new System.Diagnostics.StackTrace(1, true);
|
||||||
|
tracer.Created(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
~DisposableWrapper()
|
~DisposableWrapper()
|
||||||
@ -39,27 +55,17 @@ namespace Acacia.Utils
|
|||||||
Interlocked.Increment(ref Statistics.DeletedWrappers);
|
Interlocked.Increment(ref Statistics.DeletedWrappers);
|
||||||
if (!_isDisposed)
|
if (!_isDisposed)
|
||||||
{
|
{
|
||||||
Logger.Instance.Warning(this, "Undisposed wrapper: {0}", _createdTrace);
|
Logger.Instance.Warning(this, "Undisposed wrapper: {0}", StackTrace);
|
||||||
// Dispose, but don't count auto disposals, so the stats show it.
|
|
||||||
DoRelease();
|
DoRelease();
|
||||||
}
|
}
|
||||||
else
|
tracer.Deleted(this, _isDisposed);
|
||||||
{
|
|
||||||
--typeCounts[GetType()];
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private bool _isDisposed;
|
|
||||||
private readonly System.Diagnostics.StackTrace _createdTrace;
|
|
||||||
|
|
||||||
virtual public void Dispose()
|
virtual public void Dispose()
|
||||||
{
|
{
|
||||||
if (!_isDisposed)
|
if (!_isDisposed)
|
||||||
{
|
{
|
||||||
if (!typeCounts.ContainsKey(GetType()))
|
tracer.Disposed(this);
|
||||||
typeCounts.Add(GetType(), 1);
|
|
||||||
else
|
|
||||||
++typeCounts[GetType()];
|
|
||||||
|
|
||||||
_isDisposed = true;
|
_isDisposed = true;
|
||||||
Interlocked.Increment(ref Statistics.DisposedWrappers);
|
Interlocked.Increment(ref Statistics.DisposedWrappers);
|
||||||
|
Loading…
Reference in New Issue
Block a user