- Отладка приложений Xamarin.iOS
- Отладка библиотек классов Mono
- Связанные ссылки
- Задание точек останова
- Начало отладки
- Условные точки останова
- Переход по коду
- Точки останова
- Диагностика устройства
- Отладка по беспроводному соединению
- Технические сведения
- Доступ к консоли
- Debugging Xamarin.iOS Apps
- Setting Breakpoints
- Start Debugging
- Conditional Breakpoints
- Navigating through code
- Breakpoints
- Device Diagnostics
- Wireless Debugging
- Technical Details
- Accessing the Console
- Debugging Mono’s Class Libraries
Отладка приложений Xamarin.iOS
Отладка библиотек классов Mono
Xamarin.iOS поставляется с исходным кодом для библиотек классов Mono, что позволяет вам легко изучать внутренние взаимодействия через пошаговое выполнение из отладчика.
Поскольку эта функция требует больше памяти во время отладки, по умолчанию она отключена.
чтобы включить эту функцию, убедитесь, что параметр отладка только кода проекта снят с пункта «не выполнять шаг с заходом кода платформы » в меню » Visual Studio для Mac» отладчика «предпочтения «, как показано ниже:
для отладки библиотек классов в Visual Studio необходимо отключить Только мой код в меню » параметры отладки «. На узле Отладка Общие снимите флажок включить только мой код .
После этого вы сможете запускать приложение и использовать пошаговое выполнение для любой из базовых библиотек классов Mono.
Связанные ссылки
Для отладки приложений Xamarin.iOS можно использовать встроенный отладчик Visual Studio или Visual Studio для Mac.
Используйте встроенное средство отладки Visual Studio для Mac при отладке кода C# и других управляемых языков. Используйте LLDB при отладке кода C, C++ или Objective C, привязываемого к проекту Xamarin.iOS.
При компиляции в режиме отладки приложения характеризуются низкой скоростью и большим размером, так как Xamarin.iOS нужно инструментировать каждую строку кода. Обязательно переведите сборку в режим выпуска, прежде чем осуществлять выпуск.
Отладчик Xamarin.iOS интегрирован в IDE и позволяет разработчикам выполнять отладку приложений Xamarin.iOS, созданных на любом поддерживаемом Xamarin.iOS управляемом языке, в симуляторе или на устройстве.
Отладчик Xamarin.iOS использует «мягкий» отладчик Mono, который обеспечивает взаимодействие сгенерированного кода и среды выполнения Mono со средой IDE в процессе отладки. Этим он отличается от «жестких» отладчиков, таких как LLDB или MDB, которые контролируют выполнение отлаживаемой программы без взаимодействия с ней и учета ее особенностей.
Задание точек останова
Приступая к процессу отладки, в первую очередь необходимо задать для приложения точки останова. Для этого щелкните на полях редактора рядом с номером той строки кода, где нужно установить точку:
Вы можете просмотреть все точки останова, заданные в коде, на панели точек останова:
если панель точек останова не отображается автоматически, можно сделать ее видимой, выбрав представление отладка Windows > точки останова .
если панель точек останова не отображается автоматически, можно сделать ее видимой, выбрав отладка Windows > точки останова .
Прежде чем приступать к отладке любого приложения, обязательно переведите конфигурацию в режим Отладки, поскольку он содержит полезный набор инструментов для выполнения отладки, включая точки останова, визуализаторы данных и просмотр стека вызовов:
Начало отладки
Чтобы начать отладку, выберите целевое или аналогичное устройство в IDE:
Затем разверните приложение, нажав кнопку воспроизвести .
При попадании в точку останова код выделяется желтым цветом:
На этом этапе вы можете использовать средства отладки, например проверку значений объектов, для получения дополнительных сведений о том, что происходит в коде:
Условные точки останова
Вы также можете задавать правила, определяющие условия активации точки останова. Это называется добавлением условной точки останова.
Чтобы задать условную точку останова, получите доступ к окно свойству точки останова, которая может быть выполнена двумя способами:
Чтобы добавить условную точку останова, щелкните правой кнопкой мыши поле редактора слева от номера строки кода, где требуется задать точку останова, а затем выберите пункт «Создать точку останова»:
Чтобы добавить условие в существующую точку останова, щелкните точку останова правой кнопкой мыши и выберите пункт Свойства точки останова или на панели точки останова нажмите кнопку Свойства, как показано ниже.
Затем вы можете ввести условие, при котором эта точка останова активируется:
Чтобы задать условную точку останова в Visual Studio, сначала задайте обычную точку останова. Щелкните точку останова правой кнопкой мыши, чтобы открыть контекстное меню:
Выберите пункт Условия… , чтобы открыть меню Параметры точки останова:
Здесь вы можете ввести условия, при которых эта точка останова активируется
Дополнительные сведения об использовании условных точек останова в более ранних версиях Visual Studio см. в документации по Visual Studio.
Переход по коду
При достижении точки останова инструменты отладки позволяют получить контроль над выполнением программы. В вашей IDE появятся четыре кнопки для запуска и пошагового выполнения кода.
В Visual Studio для Mac они будут выглядеть так:
Эти особые значения приведены ниже.
- Воспроизведение/остановка — запускает и останавливает выполнение кода до следующей точки останова.
- Шаг с обходом — выполняет следующую строку кода. Если она содержит вызов функции, эта функция выполняется, а затем выполнение останавливается на следующей за ней строке.
- Шаг с заходом — также выполняет следующую строку кода. Если она является вызовом функции, эта команда останавливается на первой строке функции, позволяя продолжить ее отладку по строкам. Если следующая строка не является функцией, команда работает аналогично шагу с обходом.
- Шаг с выходом — возвращается к строке, где была вызвана текущая функция.
В Visual Studio они будут выглядеть так:
Эти особые значения приведены ниже.
- Воспроизведение/остановка — запускает и останавливает выполнение кода до следующей точки останова.
- Шаг с обходом (F10) — выполняет следующую строку кода. Если она содержит вызов функции, эта функция выполняется, а затем выполнение останавливается на следующей за ней строке.
- Шаг с заходом (F11) — также выполняет следующую строку кода. Если она является вызовом функции, эта команда останавливается на первой строке функции, позволяя продолжить ее отладку по строкам. Если следующая строка не является функцией, команда работает аналогично шагу с обходом.
- Шаг с выходом (Shift + F11) — возвращается к строке, где была вызвана текущая функция.
Дополнительные сведения в об отладке см. в документации по перемещению по коду с помощью отладчика Visual Studio.
Точки останова
Необходимо отметить, что iOS дает приложению всего несколько секунд (10) на запуск и выполнение метода FinishedLaunching в делегате приложения. Если приложение не выполнит метод в течение 10 секунд, iOS прервет этот процесс.
Это означает, что задать точки останова в коде запуска вашей программы практически невозможно. Если вы хотите выполнить отладку кода запуска, необходимо задержать часть его инициализации и поместить ее в метод, вызываемый таймером, или в любой другой метод обратного вызова, который выполняется после завершения процесса FinishedLaunching.
Диагностика устройства
Если при настройке отладчика возникает ошибка, включите подробную диагностику, добавив «-v -v -v» к дополнительным аргументам mtouch в параметрах проекта. Это позволит отобразить подробные сведения об ошибке в консоли устройства.
Отладка по беспроводному соединению
По умолчанию Xamarin.iOS использует USB-подключение для отладки приложений на устройствах. Однако иногда при разработке приложений, в которых применяется ExternalEccessory, необходимо использовать USB-устройство для проверки подключения и отключения кабеля. В таких случаях вы можете выполнять отладку по беспроводной сети.
Дополнительные сведения о развертывании и отладке по беспроводному соединению см. в этом руководстве.
Технические сведения
Xamarin.iOS использует новый «мягкий» отладчик Mono. В отличие от стандартного отладчика Mono, который представляет собой программу, управляющую отдельным процессом с помощью интерфейсов операционной системы, «мягкий» отладчик открывает доступ к функциям отладки среды выполнения Mono через соединительный протокол.
При запуске отлаживаемое приложение обращается к отладчику, и отладчик начинает работу. Xamarin.iOS для Visual Studio использует агент Xamarin для Mac в качестве посредника между приложением (в Visual Studio) и отладчиком.
Когда отладка выполняется на устройстве, «мягкий» отладчик обеспечивает тесное взаимодействие с приложением. Это означает, что двоичные файлы сборки, создаваемые в процессе отладки, будут иметь больший размер, так как отладка подразумевает инструментирование с включением дополнительного кода в каждой точке последовательности.
Доступ к консоли
Журналы аварийного завершения и выходные данные класса консоли будут отправляться в консоль iPhone. Для получения доступа к этой консоли используйте Organizer (Организатор) в Xcode, выбрав в нем нужное устройство.
Если вы не хотите запускать Xcode, воспользуйтесь программой настройки iPhone Configuration Utility от Apple, обеспечивающей прямой доступ к консоли. Она также позволяет открывать журналы консоли с компьютера Windows, если вы выполняете отладку в полевых условиях.
Для пользователей Visual Studio в окне вывода доступно несколько журналов, однако для получения более подробных журналов перейдите на компьютер Mac.
Источник
Debugging Xamarin.iOS Apps
Xamarin.iOS applications can be debugged with the built-in debugger in Visual Studio for Mac or Visual Studio.
Use Visual Studio for Mac’s native debugging support for debugging C# and other managed languages code and use LLDB when you need to debug C, C++ or Objective C codethat you might be linking with your Xamarin.iOS project.
When you compile applications in Debug mode, Xamarin.iOS will generate slower and much larger applications as every line of code must be instrumented. Before releasing, make sure that you do a Release build.
The Xamarin.iOS debugger is integrated into your IDE and it allows developers to debug Xamarin.iOS applications built with any of the managed languages supported by Xamarin.iOS in the simulator and on the device.
The Xamarin.iOS debugger uses the Mono Soft Debugger, which means that the generated code and the Mono runtime cooperate with the IDE to provide a debugging experience. This is different than hard debuggers like LLDB or MDB which control a program without the knowledge or cooperation from the debugged program.
Setting Breakpoints
When you are ready to start debugging your application the first step is to set breakpoints your application. This is done by clicking in the margin area of the editor, next to the line number of code you want to break at:
You can view all the breakpoints that have been set in your code by going to the Breakpoints pad:
If the Breakpoints pad does not display automatically, you can make it visible by selecting View > Debug Windows > Breakpoints
If the Breakpoints pad does not display automatically, you can make it visible by selecting Debug > Windows > Breakpoints
Before you begin debugging any application, always ensure that the configuration is set to Debug, as this contains a helpful set of tools to support debugging such as breakpoints, using data visualizers, and viewing the call stack:
Start Debugging
To start debugging, select the target device or similar in your IDE:
Then deploy your application by pressing the Play button.
When you hit a breakpoint, the code will be highlighted yellow:
Debugging tools, such as inspecting the values of objects, can be used at this point to get more information about what is happening in your code:
Conditional Breakpoints
You can also set rules dictating the circumstances under which a breakpoint should occur, this is know as adding a conditional breakpoint.
To set a conditional breakpoint, access the Breakpoint Properties window, which can be done in two ways:
To add a new conditional breakpoint, right-click on the editor margin, to the left of the line number for the code you wish to set a breakpoint on, and select New Breakpoint:
To add a condition to an existing breakpoint, right-click on the breakpoint and select Breakpoint Properties or in the Breakpoints Pad select the properties button illustrated below:
You can then enter the condition under which you want to breakpoint to occur:
To set a conditional breakpoint in Visual Studio, first set a regular breakpoint. Right-click on the breakpoint to display its context menu:
Select Conditions. to display the Breakpoint Settings menu:
Here, you can enter the conditions under which you want the breakpoint to occur
For more information on using breakpoint conditions in earlier versions of Visual Studio, refer to Visual Studio’s documentation on this topic.
Navigating through code
When a breakpoint has been reached, the Debug tools enable you to get control over the program’s execution. The IDE will display four buttons, allowing you to run and step through the code.
In Visual Studio for Mac they will look like the following:
- Play/Stop – This will begin/stop executing the code, until the next breakpoint.
- Step Over – This will execute the next line of code. If the next line is a function call, step over will execute the function, and will stop at the next line of code after the function.
- Step Into – This will also execute the next line of code. If the next line is a function call, Step Into will stop at the first line of the function, allowing you to continue line-by-line debugging of the function. If the next line is not a function, it will behave the same as Step Over.
- Step Out – This will return to the line where the current function was called.
In Visual Studio they will look like the following:
- Play/Stop – This will begin/stop executing the code, until the next breakpoint.
- Step Over (F10) – This will execute the next line of code. If the next line is a function call, step over will execute the function, and will stop at the next line of code after the function.
- Step Into (F11) – This will also execute the next line of code. If the next line is a function call, Step Into will stop at the first line of the function, allowing you to continue line-by-line debugging of the function. If the next line is not a function, it will behave the same as Step Over.
- Step Out (Shift + F11) – This will return to the line where the current function was called.
For more in depth documentation on Debugging, see the Navigate Code with the Visual Studio Debugger.
Breakpoints
It is important to point out that the iOS gives applications only a handful of seconds (10) to startup and complete the FinishedLaunching method in the Application delegate. If the application does not complete this method in 10 seconds, then iOS will kill the process.
This means that it is almost impossible to set breakpoints on the startup code of your program. If you want to debug your startup code, you should delay some of its initialization and put that into a timer-invoked method, or in some other form of callback method that is executed after FinishedLaunching has terminated.
Device Diagnostics
If there is an error setting up the debugger, you can enable detailed diagnostics by adding «-v -v -v» to the additional mtouch arguments in your Project Options. This will print detailed error information to the device console.
Wireless Debugging
The default in Xamarin.iOS is to debug your application on your devices over the USB connection. Sometimes the USB device might be needed to test plugging/unplugging of the cable for developing ExternalAccessory-powered applications. In those cases, you can use debugging over the wireless network.
For more information on Wireless Deployment and Debugging, refer to the Wireless Deployment guide.
Technical Details
Xamarin.iOS uses the new Mono soft debugger. Unlike the standard Mono debugger which is a program that controls a separate process by using operating system interfaces to control a separate process, the soft debugger works by having the Mono runtime expose the debugging functionality through a wire protocol.
On startup, an application that is to be debugged contacts the debugger and the debugger starts to operate. In Xamarin.iOS for Visual Studio, the Xamarin Mac Agent acts as the middle-man between the application (in Visual Studio) and the debugger.
This soft debugger requires a cooperative debugging scheme when running on the device. This means that your binary builds when debugging will be larger as the code is instrumented to contain extra code at every sequence point to support debugging.
Accessing the Console
Crash logs and the output of the Console class will be sent to the iPhone console. You can access this console with Xcode using the «Organizer» and selecting your device from the organizer.
Alternatively, if you do not want to start up Xcode, you can use the Apple’s iPhone Configuration Utility to directly access the console. This has the added bonus that you can access the console logs from a Windows machine if you are debugging a problem in the field.
For Visual Studio users, there are a few logs available in the Output window, but you should switch over to your Mac for more thorough and detailed logs.
Debugging Mono’s Class Libraries
Xamarin.iOS ships with the source code for Mono’s class libraries, and you can use this to single step from the debugger to see how things are working under the hood.
Since this feature consumes more memory during debugging, this is turned off by default.
To enable this feature, make sure the Debug project code only; do not step into framework code option is deselected under the Visual Studio for Mac > Preferences > Debugger menu as illustrated below:
To debug the class libraries in Visual Studio, you must disable Just My Code under the Debug > Options menu. In the Debugging > General node, clear the Enable Just My Code checkbox:
Once you do this, you can start your application and single step into any of Mono’s core class libraries.
Источник