TL; DR
Visual Studio 2012用のデバッグビジュアライザーをC#で記述してIEnumerable<string>
、string[]
または同様のオブジェクトを視覚化できるようにする方法を知っている人はいますか?
詳細
VisualStudioDebug Visualizerは素晴らしいです、そして私はいくつかの人気のあるもの(Mole)を定期的に使用しています。しかし、今やいくつかのカスタムビジュアライザーを展開する時が来ました。文字列の単純なビジュアライザーから始めました。
[assembly: System.Diagnostics.DebuggerVisualizer(typeof(My.Namespace.DebuggerSide),
typeof(VisualizerObjectSource),
Target = typeof(string),
Description = "Awesome Visualizer")]
DebuggerSideのコードは、基本的にテンプレートの例です。
public class DebuggerSide : DialogDebuggerVisualizer
{
protected override void Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider)
{
if (windowService == null)
throw new ArgumentNullException("windowService");
if (objectProvider == null)
throw new ArgumentNullException("objectProvider");
var data = (string)objectProvider.GetObject();
using (var displayForm = new VisualizerForm(data))
{
windowService.ShowDialog(displayForm);
}
}
/// <summary>
/// Tests the visualizer by hosting it outside of the debugger.
/// </summary>
/// <param name="objectToVisualize">The object to display in the visualizer.</param>
public static void TestShowVisualizer(object objectToVisualize)
{
VisualizerDevelopmentHost visualizerHost = new VisualizerDevelopmentHost(objectToVisualize, typeof(DebuggerSide));
visualizerHost.ShowVisualizer();
}
}
VisualizerForm
は、追加のコントロールなどを備えたカスタムフォームです...プロジェクトをビルドしてdllをMy Documents/Visual Studio 11/Visualizers
フォルダーに配置し、Visual Studioを再起動すると、文字列オブジェクトのブレークポイントにヒットしたときに、外観のガラスアイコンの下にデバッガーが表示されます。 。ウーフー!ここまでは順調ですね。
string
ここで、視覚化する代わりに、視覚化string[]
またはIEnumerable<string>
同様のオブジェクトを作成したいと思います。ただし、アセンブリ属性をに変更するとIEnumerable<string>
、これは機能せず、IEnumerableオブジェクトに表示されるガラスアイコンすら表示されません。
UPDATE
TargetTypeをに変更し、List<>
にキャストできるかどうかを確認することで、動作させることができList<string>
ます。ただし、これは、デバッグしたいすべてのオブジェクトをキャストする必要List
があり、使用できない、IEnumerable<>
またはstring[]を使用できないことを意味します。