MsBuild покорён

Наконец-то я разобрался с самой ужасной и неприятной особенностью msbuild – регулярное удаление промежуточного выхода компилятора, то бишь объектников.
Проблема, собсно заключалась в следующем:
читать дальше

Грубая сила

Дибажил я тут одну программку. Вылетала она при выходе, при чём совсем в том коде, который писался нами, и от которого есть исходники. Вылетала она в коде движка, от которого есть только либы и заголовочные файлы.
Происходило всё очень просто – access violation writing location 0xfeeefeee, что обозначает попытку записи в уже освобождённую память.
В ход пошло всё, что было под рукой – дизасм, просмотр дампов памяти, брейкпоинты на запись/чтение памяти. Даже квакса чуть задействовал, правда он пришёл, показал как правильно пользоваться тем, что было и ушёл. Но, при этом он подсказал одну очень умную вещь – почему бы мне не порыться получше в SDK движка и не поискать pdb (Program database – отладочная информация) от этой дллки. Я порылся, и действительно обнаружил оную, подключил – и вуаля – сразу всё стало на свои места. Одного взгляда на call-stack хватило, чтобы понять, кто и кого обманывает. Теперь уже осталось совсем немного – выяснить как именно происходит нарушение записи и починить.

Собсно резюме – грубая сила всегда будет уступать думающему мозгу. Даже в программировании 🙂

Экспортёр для XSI

В свете последних тенденций борьбы с пиратством да и просто исходя из экономии денег (или их отсутствия), стало очень актуально переходить с мегадорогих пакетов разработки на что-то более дешёвое. Поэтому было решено написать плагин не для 3DMax или Maya, а для менее популярного XSI, но зато более финансово доступного.

Оказалось что всё очень даже неплохо. С версии 6 (судя по документации), данная среда поддерживает плагины, написанные на C#, а писать на нём подобные вещи – неописуемое удовольствие. Замечу, что написание и отладка базовой функциональности у меня заняла один день, правда пришлось выключить ICQ, IRC и браузер.

туториал

Almost Лето

В Киеве уже почти неделю +28, именно столько показывает термометр в гугл-десктопе и я бы подумал, что он сломался, но в машине термометр показывает столько же.
Интересно, что если раньше жара вызывала непреодолимое желание свалить куда-нить подальше, то теперь всё как-то спокойно – меня практически всё устраивает, надо только море под бок перенести, и всё 🙂
Плохо, что активный отдых теперь нужно переносить на поздний вечер-ночь, иначе просто начинаешь задыхаться. С другой стороны скоро уже можно будет ходить купаться, тем более, что на выходных сезон уже открыли.
А каштаны ещё цветут – красотааа!

На роликах по городу

Выходные определённо удались. Была так называемая “дневная” – собирается куча народа на роликах и едет по определённому маршруту. Пикантность этого раза заключалась в том, что было 120 человек 🙂
К нам высадился десант из мск в количестве 60 человек, ну и местных тоже насобиралось столько же – поэтому получилось очень фаново. Не каждый день выходит прогнать по дорогам днём, почти как парадом. Главной изюминкой был Кловский спуск – хорошая дорога – не очень много машин и довольно ощутимый угол наклона. После того, как я слетел вниз – моё мировоззрение в очередной раз поменялось 🙂


debugger watches you

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

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

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