debugger watches you

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

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

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

Similar Posts

  • VirtualKD + Windows 10

    Если вдруг нужно, чтобы взлетел VirtualKD с гостевой Windows 10, то после инсталляции оного внутри машины, нужно ещё обязательно выполнить bcdedit /dbgsettings serial, иначе кина не будет. Сэкономит часик времени на рисчёрч “а чо оно не работает”. Share this post: Share on X (Twitter) Share on Facebook Share on LinkedIn Share on Email Share on…

  • Крым

    Сегодня в шесть утра приехал из Крыма, что я скажу – море, даже если всего на три дня – это классно. В четверг днем сходил в центральные ЖД кассы и купил билет (на тот момент единственный) в купе, нижнее! На фирменный поезд 12 (оч. даже ничего так поезд), стоил он правда дороговато, но очень уж…

  • Google Crashpad

    Для того, чтобы собрать crashpad под Windows с DLL runtime (/MD /MDd), нужно создать в своём домашнем каталоге (c:/users/konst например) подкаталог .gyp и в него положить файл include.gypi со следующим содержимым: {   ‘target_defaults’: {     ‘configurations’: {       ‘Release’: {         ‘target_conditions’: [           [‘OS==”win”‘, {             ‘msvs_settings’: {                ‘VCCLCompilerTool’: {                   ‘RuntimeLibrary’:…

  • Настройка Node-RED + Raspberry PI 3 + ZWave Razberry (Raspbian 9 Stretch)

    Для того, чтобы заработала связка Node-RED с Z-Wave (open-zwave) на RPI3, нужно выполнить следующий набор манипуляций: Share this post: Share on X (Twitter) Share on Facebook Share on LinkedIn Share on Email Share on Reddit

  • starcraft II beta

    Вчера утром в почте я обнаружил инвайт на бета-тест второго старкрафта. Очень приятная неожиданность, ну очень! 🙂 Вечером я до него наконец-то добрался и сел чуток “потестить”. Итак, в бете доступен только мультиплеер, работает автоматическая система подбора противника по уровню профессионализма, можно обойтись без неё, но я до этого пока не добрался, поставил себе новичка…

  • Снова пьянка

    На выходные ездили на дачу к нашей малой, формально – праздновать защиту магистров, реально – просто “погулять”. На этот раз было прикольнее чем прошлые пьянки – там есть футбольное поле. Мы посидели на пляже и пошли играть в футбол. Хорошая игра, тем более на фоне ЧМ 🙂 Отбегались так, что когда вернулись назад, то и…