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…

  • проблема с компиляцией glBindBufferARB

    Возникла аццкая проблема – вот этот кусок не компилился glGenBuffersARB((GLsizei)1, &idx); постоянно вываливая ошибки error C2664: ‘void (GLsizei,GLuint *)’ : cannot convert parameter 1 from ‘int *’ to ‘GLsizei’ error C2664: ‘void (GLsizei,GLuint *)’ : cannot convert parameter 2 from ‘int *’ to ‘GLuint *’ если второе еще понять, можно, то первое ни в какие…

  • iGo 8 PC

    Есть такие гаджеты – GPS навигаторы, коих развелась тьма тьмущая, я сам с таким зверьком довольно долго прокатался. Один из самых удобных (с моей точки зрения) тот, на котором стоит IGO. Может быть из-за того, что я очень долго с ним дружил, а может фактический факт, но это самая удобная в пользовании программа, которую я…

  • Пивко

    Вчера вечером пили пиво в офисе, очень интересная компания получилась однако 🙂 Слева направо: KVaks, DDima, const (это я 🙂 ) Share this post: Share on X (Twitter) Share on Facebook Share on LinkedIn Share on Email Share on Reddit

  • Пятница

    Сегодня неправильная пятница. Правильная пятница – это когда ты сидишь и знаешь, что вот они выходные, почти рядом – еще чуть-чуть и ура! Но это оказалось не так, завтра рабочий день, следующую пятницу перенесли на завтра, потому что в четверг день независимости и чтобы сделать четыре выходных подряд – надо будет работать завтра. Еще оказалось,…

  • Снова дома

    Словакия – Венгрия – Хорватия – Италия – Австрия – Словакия – Венгрия, прокатились на машинке! Details will follow soon! Share this post: Share on X (Twitter) Share on Facebook Share on LinkedIn Share on Email Share on Reddit