Отладка ядра в Visual Studio: просмотр длины массива окон

Я использую визуальную студию для отладки ядра. Да, я знаю, что во всех учебниках говорится об использовании WinDbg, но визуальная студия теперь действительно впечатляет для отладки ядра. Это более поздняя разработка.

Когда у меня есть указатель в окне просмотра, предполагая, что это массив, я хотел бы видеть сразу несколько элементов в своем списке в виде раскрывающегося списка. Обычно в Visual Studio вы добавляете «,AMOUNT» после указателя, чтобы получить несколько элементов, но это не работает в режиме отладки ядра.

Эта опция доступна?

[Изменить] Как и просили, я прикрепил пример изображения. В окне просмотра я включил несколько попыток доступа к данным в переменной «ProcessPath».

введите описание изображения здесь


person Dakusan    schedule 23.10.2016    source источник
comment
Вы имеете в виду, что он хорошо работает для отладки общего приложения, такого как указатель VC++/VC? Можете ли вы поделиться со мной простым образцом с использованием одного диска? Как вы ввели текст в окно просмотра? Не могли бы вы поделиться снимком экрана?   -  person Jack Zhai-MSFT    schedule 24.10.2016
comment
Я прикрепил картинку.   -  person Dakusan    schedule 25.10.2016
comment
вы включаете «Использовать собственный режим совместимости» или «Использовать собственный режим совместимости» в меню «Инструменты» -> «Параметры» -> «Отладка»? Не настоящий эксперт по отладке ядра, но я просто сталкиваюсь с похожей проблемой, когда два параметра отладки влияют на окно просмотра отладки. Если все еще нет помощи, пожалуйста, поделитесь простым образцом, чтобы я мог настроить среду и воспроизвести эту проблему.   -  person Jack Zhai-MSFT    schedule 26.10.2016
comment
Я не смог найти эту опцию в разделе «Отладка->Общие». Вы хотели дважды сказать «Использовать собственный режим совместимости»? В настоящее время я использую 2013 год, это вариант 2015 года? Раньше я переключал среды для тестирования, поэтому мог бы сделать это снова. Если вы раньше не занимались отладкой ядра, это немного PITA, чтобы настроить и начать работу. Самый простой способ — использовать приложение hello world, предоставленное Microsoft. В нем все, что вам нужно сделать, это создать переменную char* для тестирования.   -  person Dakusan    schedule 27.10.2016
comment
Я бы хотел, чтобы downvoter оставил причину, объясняющую, почему это не очень хороший вопрос. Это могло бы помочь ОП исправить это, или остальные из нас задавали более правильные вопросы.   -  person DannyMeister    schedule 29.09.2017
comment
Да, это было бы очень мило ~.~   -  person Dakusan    schedule 29.09.2017


Ответы (1)


Во время отладки в режиме ядра окно Watch работает через средство оценки выражений WinDBG. То есть оно работает почти так же, как окно Watch в WinDBG. Поэтому ваш вопрос на самом деле не связан с Visual Studio, а скорее сводится к часам WinDBG.

Вот почему синтаксис ,amount приведет к отображению amount в качестве результата - WinDBG обрабатывает , как "вычислить и отбросить", как это делает C++. Это также объясняет, почему вы добавляете перед переменными $!, что является синтаксисом WinDBG для локальных переменных.

Хотя WinDBG поддерживает довольно много синтаксиса C++, к сожалению, он не сможет распознать синтаксис приведения к массиву C++, такой как (char(*)[4])$!ProcessPath (кстати, это работает при отладке цели пользовательского режима в отладчике VS).

Я не нашел ни одного способа приведения к массиву в WinDBG. Кажется, единственным доступным обходным путем является добавление определенных элементов массива для просмотра, например

ProcessPath[0]
ProcessPath[1]
ProcessPath[2]
ProcessPath[3]
ProcessPath[4]
ProcessPath[5]
ProcessPath[6]
ProcessPath[7]
ProcessPath[8]
person Codeguard    schedule 11.11.2016
comment
Я ценю ответ. Я дам вам голос за это, но не могу считать это решением. С таким же успехом можно дать вам 50 баллов... иначе он просто исчезнет. - person Dakusan; 11.11.2016