debugger watches you

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

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

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

Similar Posts

  • Странности жизни

    Вот интересно, как называется ситуация, которая описывается приблизительно так: давно договорились о чем-то, но потом внезапно, оказывается, что об этом как-то уже и забыли и ты смотришь с открытым ртом на уходящий без тебя поезд?… 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). И, можно сказать, прозрел. Добавил в существующие исходники всего две строчки кода и время экспорта тестового фрагмента уровня уменьшилось почти в…

  • Visual Studio Integration for GNU GCC ver 0.1 released

    Закончил писать инсталлятор и сумел поставить на “чистой” машине плагин, который смог подхватить проект и собрать его. Отлично, можно переходить к реализации следующей фазы – версия пригодная для наружного тестирования. Share this post: Share on X (Twitter) Share on Facebook Share on LinkedIn Share on Email Share on Reddit

  • Win7

    Поскольку концентрация упоминаний вокруг меня ещё не вышедшей ОС превысила все допустимые размеры, я решил посмотреть своими глазами на это счастие. Мне очень понравилось! В жертву была принесена машина, на которой стояла DesktopBSD, на которую я безуспешно пытался поставить KDE4. Машина, кстати, довольно древняя – Athlon 2500+, 2GB RAM, Radeon X850, 320 GB SATA HDD….

  • Поездка в Турцию. ч1

    Наконец-то я вернулся из отпуска. Втроем намотали что-то около 7 тыс. км, проехали через 4 (1 условно) страны, искупались в 4 морях, повидали множество природных и искуственных достопримечательностей и вообще просто отдохнули 🙂 Итак, на машине в Турцию. Украина-Румыния. Киев – Черновцы – Пятра-Нямц – Фагараш. Share this post: Share on X (Twitter) Share on…