Комментарии 26
Отличная статья, спасибо.
Но стоило бы затронуть также темы установки/перехвата харварных точек останова под Windows (SetHardwareBreakpoint) и Linux (register_user_hw_breakpoint/register_kernel_hw_breakpoint).
Но стоило бы затронуть также темы установки/перехвата харварных точек останова под Windows (SetHardwareBreakpoint) и Linux (register_user_hw_breakpoint/register_kernel_hw_breakpoint).
+6
www.computer-museum.ru/histussr/istr4816.htm
Наш родной «Счетмаш» выпускал… Вот там — отладчик. Хардварный. Это чудо бы в современном железе исполнить — для дебага сему детищу цены не было бы…
Наш родной «Счетмаш» выпускал… Вот там — отладчик. Хардварный. Это чудо бы в современном железе исполнить — для дебага сему детищу цены не было бы…
-1
а можете рассказать, что там было такого особенного? из интервью я не понял =)
// я сам считаю, что к отладчику нужно прибегать только в совершенно безвыходных ситуациях. крэшдамп там изучить, повреждение памяти за хвост схватить… как Фейнман чинил радиоприемники «думаньем», так и я предпочитаю чинить программы думаньем (ну и протыкиванием assertов во все щели) =)
// я сам считаю, что к отладчику нужно прибегать только в совершенно безвыходных ситуациях. крэшдамп там изучить, повреждение памяти за хвост схватить… как Фейнман чинил радиоприемники «думаньем», так и я предпочитаю чинить программы думаньем (ну и протыкиванием assertов во все щели) =)
+3
НЛО прилетело и опубликовало эту надпись здесь
Капитан? :)
Этому методу лет 20 уже.
Этому методу лет 20 уже.
-2
Статья хорошая, слово «останов» коробит.
-2
А как его называть тогда? Просто «бряк»?
+2
мне кажется слово «останов» весьма распространено в советской и российской литературе (было еще замечательное сокращение «авост»).
меня очень интересуют русские аналоги английских технических слов, поэтому если предложите более адекватный перевод, буду очень благодарен.
меня очень интересуют русские аналоги английских технических слов, поэтому если предложите более адекватный перевод, буду очень благодарен.
+2
А почему не «точка остановки»? Зачем слово корёжить? Чтобы было понятно, что это не просто слово а термин?
-1
Потому что термин звучит именно как «точка останова». А точка остановки — это к общественному транспорту.
-1
Отдельные термины нужны, когда обычными словами сложно отобразить нюансы. В данном случае «точка остановки» достаточно полно раскрывает суть. По сути, «точка останова» — чистейшей воды выпендрёж, создание термина ради создания термина.
В общем, термин устоявшийся, но, на мой взгляд, совершенно бесполезный.
В общем, термин устоявшийся, но, на мой взгляд, совершенно бесполезный.
+1
Я думаю в советские годы термин «точка останова» произошел от названия инженерного приспособления «останова». Ведь многие связанные с ЭВМ в те годы имели именно инженерное образование.
+1
Да, русская терминология (а также аббревиатуры) бессмыслена и беспощадна. Но термины есть термины, надо уже начинать избавляться от англицизмов.
0
Потому что термин останов был введен еще в 70е годы и присутствует во всей русскоязычной литературе. И подозреваю что введен он был не просто так. Остановка может быть по разным причинам. А «останов» определен однозначно. Не хватало еще каждый раз переспрашивать, что имелось в виду
0
Эх, жаль не на ассемблере — понятнее бы было, имхо.
0
на ассемблере кратко и понятно, но в user space не работает (как я написал, и даже пример ассемблера привел) — mov инструкции работающие с отладочными регистрами требуют нулевого уровня привилегий =)
0
_asm {int 3} //user breakpoint
-1
да. и?
+1
Легко и просто брякнутся в отладчик, если понадобится.
0
Как вы собираетесь инт3 ловить доступ к памяти? В статье же все было описано.
0
Причем тут доступ к памяти? Это один из способов безусловно выпасть в дебаггер.
0
Вы вообще статью читали?
Предположим мы пишем JIT компилятор и хотим выставлять точки останова внутри генерируемого им кода. Оказывается для этого достаточно вставить в поток кода всего лишь одну инструкцию int 3 в тех местах, в которых мы хотели бы остановить исполнение программы.
Как мы видим ничего сложного в ручной расстановке instruction breakpoints нет. Можно даже реализовывать их интерактивное включение-выключение: достаточно запоминать их позиции и заменять ненужные на пустую инструкцию nop (0x90).
Гораздо интереснее дело обстоит с другим типом точек останова — точками останова на доступ к памяти.
…
Допустим мы отлаживаем повреждение памяти в среде исполнения с копирующим сборщиком мусора, который постоянно компактифицирует кучу и всякими другими способами тасует объекты в памяти. Мы смогли выяснить приблизительно какое поле в каком объекте повреждается, но просто загрузить программу в отладчик и поставить им точку останова на доступ к этому полю не получается, потому что GC постоянно путается под ногами своими перемещениями. Поэтому у нас возникает разумное желание, чтобы сам добряк Сборщик Мусора и выставлял/обновлял этот бряк.
Предположим мы пишем JIT компилятор и хотим выставлять точки останова внутри генерируемого им кода. Оказывается для этого достаточно вставить в поток кода всего лишь одну инструкцию int 3 в тех местах, в которых мы хотели бы остановить исполнение программы.
Как мы видим ничего сложного в ручной расстановке instruction breakpoints нет. Можно даже реализовывать их интерактивное включение-выключение: достаточно запоминать их позиции и заменять ненужные на пустую инструкцию nop (0x90).
Гораздо интереснее дело обстоит с другим типом точек останова — точками останова на доступ к памяти.
…
Допустим мы отлаживаем повреждение памяти в среде исполнения с копирующим сборщиком мусора, который постоянно компактифицирует кучу и всякими другими способами тасует объекты в памяти. Мы смогли выяснить приблизительно какое поле в каком объекте повреждается, но просто загрузить программу в отладчик и поставить им точку останова на доступ к этому полю не получается, потому что GC постоянно путается под ногами своими перемещениями. Поэтому у нас возникает разумное желание, чтобы сам добряк Сборщик Мусора и выставлял/обновлял этот бряк.
0
Зарегистрируйтесь на Хабре , чтобы оставить комментарий
Точки останова на ручной тяге (для архитектуры x86)