Как эффективно реализованы точки останова отладчика?

StackOverflow https://stackoverflow.com/questions/859023

  •  21-08-2019
  •  | 
  •  

Вопрос

Иногда я накапливаю большую массу точек останова из разных сеансов отладки в разных местах моего кода.Как отладчик эффективно узнает, когда следует остановиться для точки останова?Он не может останавливаться на каждой строке, чтобы сверить номер строки и имя исходного файла с потенциально длинным списком точек останова, не так ли?

Это отладчик Java в Eclipse, но я предполагаю, что этот вопрос применим к любому отладчику.

Это было полезно?

Решение

Стратегия, используемая во многих отладчиках (я не знаю об Eclipse), заключается в вставке исправления в код в точке точки останова, которая по сути является вызовом подпрограммы или системным вызовом.Код, к которому осуществляется переход, содержит информацию о точке останова и выполняет любую печать или прием пользовательских команд, а также содержит код, который был перезаписан с помощью исправления, так что код может быть выполнен так, чтобы выполнение соответствовало исходному коду, без точки останова.

Другие советы

Чтобы добавить к хорошему ответу Надрека:

Есть статья здесь с более подробной информацией, включая некоторые более экзотические вещи (конкретные коды операций на x86;аппаратные точки останова).

Отладчики реализуют точки останова в аппаратном или программном обеспечении.Последний требует сохранения исходной инструкции, вставки специального кода, который генерирует исключение, а при возникновении исключения повторно вставляет исходную инструкцию и сообщает пользователю, что точка останова достигнута.Читать моя статья за кровавые подробности о точках останова в программном обеспечении.

Вы можете получить полную информацию о внутреннем устройстве Eclipse Debugger и о том, как его написать, по ссылке ниже.Как написать отладчик Eclipse

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top