debugger watches you

Сидел я на выходных и развлекался отладкой одного production софта, который отлично работал на линуксе, но после того, как предыдущий сервер сдох, а на новом решено было ставить FreeBSD, обнаружилось странное выпадание программы, вместо корректной работы.
Начал я гуглить туториалы по gdb и заниматься отладкой. С горем пополам обнаружилось, что происходит банальный проезд по памяти. Но так как код чужой, разбираться в нём лень, да и времени не особо много, то пришлось ходить по коду через step next и смотреть значение переменной-жертвы. Попутно читая туториал глаз зацепился за слово watch – прочитав внимательней оказалось, что можно ставить breakpoint на изменение значения переменной – алилуйя! В доке написано, что если процессор поддерживает, то будет аппаратно работать, а если нет, то программно и в разы медленней. Вторым моим удивлением оказалось, когда gdb сказал, что hardware watchpoint set. Тут я совсем офигел – сколько уже работаю с x86, а о таком и не знал.

В общем поставил я watchpoint, запустил – первый раз оно брякнулось в том месте, где переменная инициализируется, а второй раз – о чудо – именно там, где был проезд по памяти. Смотрим стек вызовов и наслаждаемся полученным великим знанием.

Подведя итог, таки интеловская платформа умеет делать аппаратно прерывания на обращения по заданному адресу и теперь отладка проезда по адресу становится в разы легче.

Similar Posts

  • Закрытие лыжного сезона 2

    Отдохнули оч хорошо, я бы сказал офигенно замечательно 🙂 Началось всё с того, что мы покурили кальян и в половине второго ночи попёрлись на Драгобрат в Карпаты. Сезон повторно закрыть, одного раза мало было 🙂 Приехали в Ясиня, пересели в газенваген и поднялись на Драг. Поселились, позавтракали и пошли кататься, правда не все. Некоторые решили…

  • Windows 1.0

    Оказывается, 25 лет назад дебютировала первая винда, накопал вот 30 секундный ролик про неё: Share this post: Share on X (Twitter) Share on Facebook Share on LinkedIn Share on Email Share on Reddit

  • OpenMP

    Попробовал тут, намедни, OpenMP (Open Multi-Processing – это набор директив компилятора, библиотечных процедур и переменных окружения, которые предназначены для программирования многопоточных приложений на многопроцессорных системах с разделяемой памятью на языках C, C++ и Fortran). И, можно сказать, прозрел. Добавил в существующие исходники всего две строчки кода и время экспорта тестового фрагмента уровня уменьшилось почти в…

  • Баттлфилд 2

    Игра жжот. Она жжот сильнее чем цивилизация 🙂 Я подсел на нее как на какой-то наркотик – я спешу поскорее попасть домой, чтобы побегать с толпой на сервере, повоевать в составе отделения и пользуясь голосовыми переговорами. Это сила 🙂 Интересная штука эта игра – наглядно показывает, что ходить надо толпой – если ты убежал куда-то…

  • Немного авантюризма

    Вчера в 3 часа ночи меня к себе в офис пригласил KVaks, сказал, что если приеду, то даже подарит свою книгу 🙂 Потом он выслал за мной такси. Интересно, что я согласился и приехал, т.е. в 3:30 ночи я был на другом конце Киева и смотрел на PSP 🙂 а также проникался крутизной книжки про…