debugger watches you

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

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

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

Similar Posts

  • ipod

    Прибыл утром на почту, забрал вожделенную бандероль, которой оказался большой бумажный пакет с надписью used ipod. Доехал до работы, распаковал – действительно, внутри лежит ipod photo 60 gb, который я и заказывал, в комплекте кабель подключения и наушники. Все как обещал продавец. Включил – работает 🙂 Обошлось это счастье мне в 98.5 фунтов английских, или…

  • Выходные

    Эти выходные оказались зачетными, обнаружились несколько очень неприятных багов, из-за которых пришлось торчать на работе, ведь на носу Лейпциг 🙂 Теперь я, вроде бы, умею раскручивать стек, имея дамп всей памяти, слава богу ее не очень много, всего 24МБ. Проапгрейдил ассерт, теперь он выдает файл, строку, имя функции в которой произошло нарушение. Написал, как показала…

  • VS2005 Automation

    Я пишу Add-in для студии, который бы позволил более эффективно компилировать проекты gcc компилятором, которым мы пользуемся. На данный момент самой важной и насущной проблемой является управление компилятором, получение текущих настроек и установка своих, и вот тут начинаются проблемы 🙁 Для любого Add-in доступен объект типа EnvDTE2, который предоставляет доступ ко всему, что есть в…

  • Рефакторинг

    Рефакторинг на C++ является штукой нетривиальной, я бы сказал ужасной 🙂 Я потратил уеву тучу времени, чтобы переместить движок игры в дллку, и еще потрачу кучу времени на борьбу с линковкой с дллкой. Ужасно, но деваться особо некуда, надо было изначально писать менее связанный код 🙂 А теперь попала белка в колесо… Share this post:…

  • Турция ч.3

    На Болгарию Эфорие-Норд – Дуран-Кулак – Несебър – Бургас – Царево – Малко Търново Граница возникла внезапно, вот мы ехали, а вот хлоп, и оказывается, что то, что мы видим – это не придорожное кафе, а пограничный переход, очень небольшой, на две полосы. Share this post: Share on X (Twitter) Share on Facebook Share on…