Visual Studio не загружает мой визуализатор отладчика - PullRequest
6 голосов
/ 13 августа 2010

Я написал свой собственный визуализатор отладчика.

Он и его атрибуты находятся в своей сборке.В сборке, содержащей класс для отладки, нет ссылок или атрибутов - я хочу создать 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

Я ставлю точку останова на экземпляр IFinCellTable, который является конкретно FinCellTable.Он не показывает увеличительное стекло.

Я отладил Visual Studio, используя другую Visual Studio, так как первый VS отлаживал.Я наблюдал за выходным окном как первый VS, загруженный DLL.Когда я запустил визуализатор для таблицы данных, вторая VS вывела, что она загрузила Microsoft.VisualStudio.DebuggerVisualizers.dll и Microsoft.VisualStudio.Debugger.DataSetVisualizer.dll (последний из правильного каталога, который я сказал выше).(Окно «Модули» ведет себя / показывает то же самое.)

Итак, очевидно, что моя вставная сборка Debugger Visualizer не загружается VS, поэтому она не знает, чтобы показать увеличительное стекло.

Как вы получаете Visual Studio для загрузки визуализаторов заранее, так что вставные визуализаторы работают и вам не нужно редактировать исходный код?

Ответы [ 4 ]

3 голосов
/ 11 ноября 2010

Дикая догадка: вы уверены, что правильные файлы в 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 .

1 голос
/ 03 ноября 2015

Этому вопросу более 5 лет, поэтому я предполагаю, что он больше не относится к оригинальному постеру, но для всех, кто пытается сделать что-то подобное:

System.Diagnostics.DebuggerVisualizer не работает, если целью является интерфейс. Вы должны указать конкретный тип. Вы должны указать атрибут для каждого конкретного типа, который вы хотите визуализировать:

[System.Diagnostics.DebuggerVisualizer("Financials.Debugging.CellTableVisualizer, Financials.Debugging, Version=1.0.0.0, Culture=neutral, PublicKeyToken=...")]
[Serializable]
public class FinCellTable<S> : IFinCellTable, IEnumerable<List<FinCell.IFinCell>>
    where S : class, FinCell.IFinHeaderCell, FinCell.IFinCell, new()
{
0 голосов
/ 22 октября 2014

Правильная папка для размещения: C: \ Program Files (x86) \ Microsoft Visual Studio 12.0 \ Common7 \ Packages \ Debugger \ Visualizers. Как только вы поместите эту DLL-библиотеку туда и перезапустите Visual Studio, вы должны получить «увеличительное стекло» над типом «Expression» переменных (в режиме отладки вы получите его в окне просмотра, а также при наведении курсора мыши на переменную) 1001 *

0 голосов
/ 16 января 2011

Я считаю, что это можно отключить в меню Инструменты> Параметры: если вы не видите эффектов DebuggerDisplay или DebuggerTypeProxy, убедитесь, что Инструменты> Параметры> Отладка> Общие> Показать необработанную структуру объектов в окнах переменных НЕ проверены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...