6

私は独自の Debugger Visualizer を作成しました。

それと属性は、独自のアセンブリにあります。デバッグ対象のクラスを含むアセンブリに参照または属性がありません。ユーザーが使用できるオプションのドロップイン dll を作成したいと考えています。

デバッグしようとしているクラスはジェネリックです。

[Serializable]
public class FinCellTable<S> : IFinCellTable, IEnumerable<List<FinCell.IFinCell>>
    where S : class, FinCell.IFinHeaderCell, FinCell.IFinCell, new()

ビジュアライザーは次のとおりです。

[assembly: System.Diagnostics.DebuggerVisualizer(
        typeof(Financials.Debugging.CellTableVisualizer),
        typeof(VisualizerObjectSource),
        Target = typeof(Financials.Transformation.IFinCellTable),
        Description = "FinCell Table Visualizer")]
[assembly: System.Diagnostics.DebuggerVisualizer(
        typeof(Financials.Debugging.CellTableVisualizer),
        typeof(VisualizerObjectSource),
        Target = typeof(Financials.Transformation.FinCellTable<Financials.FinCell.FinHeaderCell>),
        Description = "FinCell Table Visualizer")]

namespace Financials.Debugging
{
    public class CellTableVisualizer : 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 = (IFinCellTable)objectProvider.GetObject();
            using (var displayForm = new CellTableVizForm())
            {
                displayForm.PopulateForm(data);
                windowService.ShowDialog(displayForm);
            }
        }
    }
}

Visual Studio 2010 を実行しています。次のディレクトリには、ビジュアライザー アセンブリの .dll と .pdb が含まれています。

C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Packages\Debugger\Visualizers

具体的には FinCellTable である IFinCellTable のインスタンスにブレークポイントを配置します。虫眼鏡は表示されません。

最初のVSがデバッグしていたので、別のVisual Studioを使用してVisual Studioをデバッグしました。最初の VS ロードされた dll として出力ウィンドウを見ました。データテーブルでビジュアライザーをトリガーすると、2 番目の VS は、Microsoft.VisualStudio.DebuggerVisualizers.dll と Microsoft.VisualStudio.Debugger.DataSetVisualizer.dll (後者は上記の正しいディレクトリからのもの) をロードしたことを出力しました。(モジュールウィンドウは同じように動作/表示します。)

したがって、明らかに私のDebugger Visualizer Drop-InアセンブリはVSによってロードされないため、虫眼鏡を表示することはわかりません。

Visual Studio にビジュアライザーを事前にロードさせて、ドロップイン ビジュアライザーが機能し、元のコードを編集する必要がないようにするにはどうすればよいでしょうか?

4

4 に答える 4

3

勝手な推測: 正しいファイルがC:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Packages\Debugger\Visualizersではなく にあると確信していますC:\Users\<you>\AppData\Local\VirtualStore\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Packages\Debugger\Visualizersか?

はいの場合、それはUAC 仮想化が原因です。

于 2010-11-11T09:13:22.947 に答える
0

これは、[ツール] > [オプション] で無効にできると思います: DebuggerDisplay または DebuggerTypeProxy の効果が表示されない場合は、[ツール] > [オプション] > [デバッグ] > [全般] > [変数ウィンドウにオブジェクトの生の構造を表示] がチェックされていないことを確認してください。

于 2011-01-16T17:16:11.750 に答える
0

これを配置する正しいフォルダーは、C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Packages\Debugger\Visualizers です。この DLL をそこに配置して Visual Studio を再起動すると、「式」タイプの変数の上に「拡大鏡」が表示されます (デバッグ モードでは、ウォッチ ウィンドウに表示され、変数の上にマウス カーソルを移動すると表示されます)。

于 2014-10-22T19:32:22.517 に答える