Как стать автором
Обновить

Комментарии 26

Отличная статья, спасибо.
Но стоило бы затронуть также темы установки/перехвата харварных точек останова под Windows (SetHardwareBreakpoint) и Linux (register_user_hw_breakpoint/register_kernel_hw_breakpoint).
я отлаживал проблему под Маком, поэтому весь код написал исключительно для Мака.

спасибо за названия функций, сократит время на поиск, если придется отлаживать что-то аналогичное под Windows/Linux.
www.computer-museum.ru/histussr/istr4816.htm
Наш родной «Счетмаш» выпускал… Вот там — отладчик. Хардварный. Это чудо бы в современном железе исполнить — для дебага сему детищу цены не было бы…
а можете рассказать, что там было такого особенного? из интервью я не понял =)

// я сам считаю, что к отладчику нужно прибегать только в совершенно безвыходных ситуациях. крэшдамп там изучить, повреждение памяти за хвост схватить… как Фейнман чинил радиоприемники «думаньем», так и я предпочитаю чинить программы думаньем (ну и протыкиванием assertов во все щели) =)
вы правы, логи — наше всё
НЛО прилетело и опубликовало эту надпись здесь
Капитан? :)
Этому методу лет 20 уже.
адмирал! нет ничего нового в мире под солнцем, как сказал дядька Соломон.

я на научную новизну не претендую, просто документирую совершенные мной шаги.
Статья хорошая, слово «останов» коробит.
А как его называть тогда? Просто «бряк»?
мне кажется слово «останов» весьма распространено в советской и российской литературе (было еще замечательное сокращение «авост»).

меня очень интересуют русские аналоги английских технических слов, поэтому если предложите более адекватный перевод, буду очень благодарен.
А почему не «точка остановки»? Зачем слово корёжить? Чтобы было понятно, что это не просто слово а термин?
Потому что термин звучит именно как «точка останова». А точка остановки — это к общественному транспорту.
Отдельные термины нужны, когда обычными словами сложно отобразить нюансы. В данном случае «точка остановки» достаточно полно раскрывает суть. По сути, «точка останова» — чистейшей воды выпендрёж, создание термина ради создания термина.

В общем, термин устоявшийся, но, на мой взгляд, совершенно бесполезный.
Я думаю в советские годы термин «точка останова» произошел от названия инженерного приспособления «останова». Ведь многие связанные с ЭВМ в те годы имели именно инженерное образование.
Да, русская терминология (а также аббревиатуры) бессмыслена и беспощадна. Но термины есть термины, надо уже начинать избавляться от англицизмов.
Потому что термин останов был введен еще в 70е годы и присутствует во всей русскоязычной литературе. И подозреваю что введен он был не просто так. Остановка может быть по разным причинам. А «останов» определен однозначно. Не хватало еще каждый раз переспрашивать, что имелось в виду
Эх, жаль не на ассемблере — понятнее бы было, имхо.
на ассемблере кратко и понятно, но в user space не работает (как я написал, и даже пример ассемблера привел) — mov инструкции работающие с отладочными регистрами требуют нулевого уровня привилегий =)
Ну можно было бы накидать на ассемблере, а потом обозначив сложность этого пути (ring 3), описать метод через API…
_asm {int 3} //user breakpoint
да. и?
Легко и просто брякнутся в отладчик, если понадобится.
Как вы собираетесь инт3 ловить доступ к памяти? В статье же все было описано.
Причем тут доступ к памяти? Это один из способов безусловно выпасть в дебаггер.
Вы вообще статью читали?

Предположим мы пишем JIT компилятор и хотим выставлять точки останова внутри генерируемого им кода. Оказывается для этого достаточно вставить в поток кода всего лишь одну инструкцию int 3 в тех местах, в которых мы хотели бы остановить исполнение программы.

Как мы видим ничего сложного в ручной расстановке instruction breakpoints нет. Можно даже реализовывать их интерактивное включение-выключение: достаточно запоминать их позиции и заменять ненужные на пустую инструкцию nop (0x90).

Гораздо интереснее дело обстоит с другим типом точек останова — точками останова на доступ к памяти.



Допустим мы отлаживаем повреждение памяти в среде исполнения с копирующим сборщиком мусора, который постоянно компактифицирует кучу и всякими другими способами тасует объекты в памяти. Мы смогли выяснить приблизительно какое поле в каком объекте повреждается, но просто загрузить программу в отладчик и поставить им точку останова на доступ к этому полю не получается, потому что GC постоянно путается под ногами своими перемещениями. Поэтому у нас возникает разумное желание, чтобы сам добряк Сборщик Мусора и выставлял/обновлял этот бряк.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории