Пошаговое руководство. Отладка решения, которое содержит как управляемый, так и машинный код
Обновлен: Ноябрь 2007
В этом пошаговом руководстве содержатся действия по отладке решения, которое включает управляемые компоненты, компоненты .NET Compact Framework и компоненты в машинном коде. Visual Studio не поддерживает отладку взаимодействия приложений устройства. То есть одновременно не могут функционировать отладчики управляемого и машинного кода.
Рекомендуемым способом отладки решения, в котором содержатся как управляемые, так и машинные элементы, — это присоединение отладчика, который необходим для определенного раздела, например для раздела управляемого кода, затем отключение этого отладчика и присоединение другого отладчика по степени необходимости. Можно повторять эти действия по присоединению и отключению отладчиков к разным разделам программы.
Примечание. |
---|
На вашем компьютере названия некоторых элементов интерфейса пользователя Visual Studio или их расположение могут отличаться от указанных в нижеследующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Параметры Visual Studio. |
Это пошаговое руководство было написано с помощью параметров разработки Visual C#. В нем содержатся следующие подразделы:
Разрешение присоединения отладчика управляемого кода
Запуск приложения
Задание точки останова в машинном коде
Присоединение отладчика машинного кода
Выполнение машинного кода до точки останова
Присоединение отладчика управляемого кода
Задание точки останова в управляемом коде
Выполнение управляемого кода до точки останова
Заключение
Обязательные компоненты
В этом пошаговом руководстве используется решение, созданное в другом пошаговом руководстве Пошаговое руководство: Hello World. Пример COM-взаимодействия для смарт-устройств. Убедитесь, что данное пошаговое руководство было выполнено, а код запущен.
Разрешение присоединения отладчика управляемого кода
По умолчанию устройства, включая эмуляторы, не позволяют отладчику управляемого кода присоединяться к уже выполняемым процессам. Присоединение отладчика управляемого кода к уже работающему процессу часто происходит в решениях устройств, в которых используется как управляемый, так и машинный код.
Первым шагом является разрешение устройству присоединять отладчик управляемого кода к уже выполняемому процессу. Это можно сделать посредством задания раздела реестра на устройстве.
Примечание. |
---|
Задание этого раздела влияет на присоединение к уже запущенным управляемымпроцессам. Оно не влияет на запуск проекта с помощью запуска с отладкой (F5). Однако при отсоединении после запуска с отладкой этот процесс должен повторно присоединиться и снова начать отладку. |
Чтобы разрешить отладчику управляемого кода присоединиться к выполняющемуся процессу
В меню Пуск в Windows укажите Все программы — Microsoft Visual Studio 2008 — Удаленные инструменты Visual Studio и щелкните Редактор удаленного реестра.
В окне Выбор устройства Windows CE разверните узел Windows Mobile 5.0 Pocket PC SDK и щелкните Эмулятор Windows Mobile 5.0 Pocket PC. Это целевое устройство, используемое в этом пошаговом руководстве.
Нажмите кнопку OК.
Будет открыто окно хода выполнения Подключение к устройству, вслед за которым будет открыт эмулятор устройства и редактор удаленного реестра Windows CE.
В редакторе реестра разверните Эмулятор Windows Mobile 5.0 Pocket PC и создайте следующий раздел: HKEY_LOCAL_MACHINE\SOFTWARE\Microsot\.NETCompactFramework\Managed Debugger.
Создайте раздел, щелкнув правой кнопкой мыши .NETCompactFramework, указав команду Создать и выбрав пункт Раздел.
Обратите внимание, что между словами "Managed" и "Debugger" присутствует пробел.
Создайте значение DWORD с именем AttachEnabled.
Создайте значение DWORD, щелкнув правой кнопкой мыши Managed Debugger, наведя указателем на Создать и выбрав Значение DWORD.
Задайте Name как AttachEnabled и Value как 1.
Примечание. Задание раздела отладчика для этого устройства значительно уменьшает производительность. Если отладка больше не нужна, отключите эту функциональную возможность, вернув значение, равное 0.
Оставьте эмулятор устройства открытым для выполнения последующих действий по сохранению параметра реестра. Можно закрыть редактор реестра.
Запуск приложения
Следующим действием будет запуск приложения InteropSolution.
Чтобы запустить приложение
Откройте решение, созданное в Пошаговое руководство: Hello World. Пример COM-взаимодействия для смарт-устройств.
Убедитесь, что Эмулятор Windows Mobile 5.0 Pocket PC отображается в поле Конечное устройство в панели инструментов.
В меню Visual Studio Отладка выберите команду Начать отладку или нажмите клавишу F5.
Этот шаг служит для развертывания проекта машинного кода HelloCOMObject в эмуляторе без дополнительного вмешательства пользователя.
При открытии диалогового окна Развертывание SayHello выберите Эмулятор Windows Mobile 5.0 Pocket PC Emulator и выберите пункт Развернуть.
Это действие служит для развертывания управляемого проекта.
Это приложение открывается в эмуляторе. Не нажимайте пока эту кнопку.
Задание точки останова в машинном коде
Следующим шагом является задание точки останова в машинном коде для подготовки присоединения отладчика машинного кода.
Чтобы задать точку останова в машинном коде
В обозревателе решений щелкните правой кнопкой мыши Hello.cpp и выберите команду Перейти к коду.
Вставьте точку останова в строке, которая начинается с *text, посредством щелчка левого поля редактора кода.
Отображается символ точки останова, который выглядит как пустой круг с восклицательным знаком, что означает невозможность разрешения точки останова в настоящий момент. Происходит это потому, что в настоящий момент отсутствуют необходимые символы и источники.
В меню Visual Studio Отладка наведите указатель на пункт Окна и выберите команду Модули.
В окне Модули отображаются все модули, загруженные к настоящему моменту, например управляемое приложение SayHello.exe. Обратите внимание, что машинная библиотека HelloCOMObject.dll еще не была загружена, так как кнопка в приложении еще не была нажата.
Присоединение отладчика машинного кода
Следующим действием будет являться отключение отладчика управляемого кода, чтобы можно было присоединить отладчик машинного кода. Напоминаем, что оба вида отладчика не могут быть присоединены одновременно в проектах устройства. Эти действия необходимо выполнять, когда следует переключиться между отладчиком управляемого кода и отладчиком машинного кода.
Чтобы присоединить отладчик машинного кода
В меню Visual Studio Отладка выберите Отсоединить все.
На этом этапе отсоединяется отладчик управляемого кода, однако приложение продолжает выполняться.
В меню Отладка выберите пункт Присоединение к процессу.
В поле Транспорт выберите пункт Смарт-устройство.
Чтобы заполнить поле Квалификатор, нажмите кнопку Обзор.
В диалоговом окне Подключиться к устройству выберите пункт Эмулятор Windows Mobile 5.0 Pocket PC и нажмите команду Подключить.
Чтобы заполнить поле Присоединиться к щелкните поле Выбрать.
В диалоговом окне Выбор типа кода выберите пункт Выполнять отладку кода следующих типов, снимите флажок Управляемый код, установите флажок Машинный код и нажмите кнопку ОК.
В поле Доступные процессы выберите SayHello.exe и нажмите кнопку Присоединить.
Будет присоединен отладчик машинного кода.
Выполнение машинного кода до точки останова
Теперь можно выполнять команды до точки останова, заданной в машинном коде. При повторном изучении окна Модули можно заметить, что модули машинного кода отсутствуют. Однако библиотека HelloCOMObject.dll еще не загружена, так как еще не была нажата кнопка button1.
Примечание. |
---|
Если это пошаговое руководство было выполнено ранее, символы отладки уже могли быть загружены и эти действия можно пропустить. В противном случае, в следующем подразделе объясняется, как загрузить символы отладки. |
Чтобы переместить выполнение к точке останова машинного кода
В форме эмулятора устройства нажмите кнопку button1.
В форме будет отображено сообщение "Hello, World!", а библиотека hellocomobject.dll появится в окне Модули.
Если столбец Состояние символов для библиотеки hellocomobject.dll не содержит надписи Загруженные символы, выполните приведенные ниже действия:
Щелкните правой кнопкой мыши объект hellocomobject.dll и щелкните команду Загрузить символы.
В диалоговом окне Поиск символов перейдите к InteropSolution\HelloCOMObject\Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\Debug\HelloCOMObject.pdb.
Нажмите кнопку Открыть.
Столбец Состояние символов изменяется на Загруженные символы, а индикатор точки останова теперь отображает точку останова как разрешенную.
В форме эмулятора устройства нажмите кнопку ОК в окне Hello World!, затем снова нажмите кнопку button1.
Индикатор точки останова отображает остановку выполнения на точке останова.
В меню Отладка выберите команду Шаг с заходом или нажмите F11.
Обратите внимание на перемещения выполнения кода к следующей строке. Это демонстрирует возможность прохода через раздел машинного кода в рассматриваемом решении.
Присоединение отладчика управляемого кода
Следующим действием будет являться отключение отладчика машинного кода, чтобы можно было присоединить отладчик управляемого кода. Напоминаем, что оба вида отладчика не могут быть присоединены одновременно в проектах устройства. Эти действия необходимо выполнять, когда следует переключиться между отладчиком машинного кода и отладчиком управляемого кода.
Чтобы присоединить отладчик управляемого кода
В меню Visual Studio Отладка выберите Отсоединить все.
На этом этапе отсоединяется отладчик машинного кода, однако приложение продолжает выполняться.
В меню Отладка щелкните Присоединиться к процессу и убедитесь, что поле the Транспорт содержит значение Смарт-устройство.
Заполните поле Квалификатор посредством нажатия кнопки Выбрать, выбора пункта Эмулятор Windows Mobile 5.0 Pocket PC и нажатия кнопки Подключить.
Чтобы заполнить поле Присоединиться к, щелкните команды Выбрать, выберите Выполнять отладку кода следующих типов, установите флажок Управляемый код, снимите флажок Машинный код и нажмите кнопку ОК.
Если отображается сообщение, напоминающее о несовместимости отладки управляемого кода и отладки машинного кода, нажмите кнопку ОК.
В поле Доступные процессы выберите SayHello.exe и нажмите кнопку Присоединить.
Будет присоединен отладчик управляемого кода.
Задание точки останова в управляемом коде
Следующим шагом является задание точки останова в управляемом коде для подготовки присоединения отладчика управляемого кода.
Чтобы задать точку останова в управляемом коде
В обозревателе решений щелкните правой кнопкой мыши файл Form1.cs и выберите пункт Перейти к коду.
Вставьте точку останова в строке string text;.
Выполнение управляемого кода до точки останова
Теперь можно выполнять команды до точки останова, заданной в управляемом коде.
Чтобы переместить выполнение к точке останова управляемого кода
В эмуляторе устройства нажмите кнопку button1.
Выполнение будет приостановлено по достижении точки останова.
Заключение
Помните о необходимости сброса раздела реестра устройства до 0 в целях производительности, если больше не нужно использовать отладчик управляемого кода в уже выполняемом процессе.
См. также
Задачи
Практическое руководство. Присоединение к управляемым процессам устройства
Практическое руководство. Изменение параметров реестра устройства