Аппаратные точки наблюдения - как они работают?
Как работают точки наблюдения GDB? Могут ли быть реализованы аналогичные функции для использования доступа на уровне байтов в определенных местах?
3 ответа
Я полагаю, что GDB использует MMU, так что страницы памяти, содержащие просматриваемые диапазоны адресов, помечаются как защищенные - тогда, когда возникает исключение для записи на защищенные страницы, GDB обрабатывает исключение, проверяет, соответствует ли адрес записи определенному watchpoint, а затем либо возобновляется, либо сбрасывается в командную строку gdb соответственно.
Вы можете реализовать нечто подобное для своего собственного кода отладки или тестового набора, используя mprotect, хотя вам нужно будет реализовать обработчик исключений, если вы хотите сделать что-то более сложное, чем просто выполнить неудачную запись при неудачной записи.
Использование MMU или MPU (на других процессорах, таких как встроенные) можно использовать для реализации «аппаратных точек наблюдения»; однако некоторые процессоры (например, многие реализации Arm) имеют выделенное аппаратное обеспечение точки наблюдения, доступ к которому осуществляется через порт отладки. Это имеет некоторые преимущества перед использованием MMU или MPU.
Если вы используете подход MMU или MPU:
- PRO — для процессоров прикладного класса не требуется специального оборудования, поскольку MMU встроен для поддержки потребностей Linux или Windows. В случае специализированных процессоров класса реального времени часто используется MPU.
- ПРОТИВ — Будут программные накладные расходы на обработку исключения. Вероятно, это не проблема для процессора класса Application (например, x86); однако для встроенного приложения реального времени это может означать катастрофу.
- Ошибки CON-MMU или MPU могут возникать по другим причинам, а это означает, что обработчику необходимо точно определить, почему произошел сбой, читая различные регистры состояния.
- PRO - использование ошибок защиты памяти MMU часто может охватывать множество отдельных переменных, чтобы легко наблюдать за многими переменными. Однако это обычно не требуется в большинстве ситуаций отладки.
Если вы используете выделенное оборудование точки наблюдения для отладки, такое как поддерживаемое Arm:
- PRO — не влияет на производительность программного обеспечения (помогает при отладке тонких проблем с синхронизацией). Инфраструктура отладки спроектирована так, чтобы не навязываться.
- ПРОТИВ — существует ограниченное количество этих аппаратных блоков на любом конкретном кремнии. Для Arm их может быть 0, 2 или 4. Так что нужно быть внимательным при выборе. Блоки могут охватывать диапазон адресов, но есть ограничения. Для некоторых процессоров они могут быть даже ограничены областью памяти.