LG.BALUKATION's Weblog

Ничего, это тоже кое-что… А при желании из него можно сделать что угодно

Отладчики

Posted by LG.BALUKATION на 2008/11/01

Минувшим днём я во второй раз в жизни попробовал нормально по-пользоваться отладчиком. Вроде как я давно знаю о таких инструментах и пробуя любую среду разработки обязательно смотрю как там с отладчиком, но на практике почти не пользуюсь этим инструментом.

Раньше как-то считал, что мне оно не надо, т. к. я не пишу большого и сложного софта — все мои самопалы были просты и даже в диломе я искал и правил баг другими способами… Но уже больше года я работаю программистом, имею дело с проектами порой больше гигабайта (хотя это не только код, но и его не мало бывает) и моя работа состоит именно в изменении проекта под определённые нужды и правке багов — однако отладчик на работе впервые попробовал заюзать только в эту пятницу.

Даже не знаю чегоб сказать в своё оправдание — как-то повелось, что кроме использования отладчика есть и другие способы «разбора полётов». Традиционно, я пытаюсь полагаться на визуальный просмотр кода и вывод отладочной информации. Не всегда получается, но я всёж пытаюсь этому научится.

Тут вот полез смотреть почему кое-что не красиво рисуется, заодно глянул собственно где и примерно как оно рисуется. Увиденного подхода я совсем не ожидал! Оказалось, менюхи и прочий не-игровой HUD рисуется рекурсивно! Есть некий метод, который может отрисовать один элемент, зато любой — игра вызывает этот метод и передаёт ему идентификатор требуемого меню. Метод смотрит, сколько и каких элементов надо нарисовать, после чего вызывает сам себя для каждого такого элемента — элемент тоже может быть составным и того у нас есть нечто типа дерева яруса на три, обходом которого и рисуется требуемый экран настроек/паузы и прочие менюхи. Дерево хранится в виде массива констант, но оказывается оно берётся из ресурсов!

И впрямь, среди тулз нашёлся некий парсер менюх, создающий из описания интерфейса бинарник констант и заголовки для C++/Java с идентификаторами этих констант. Подход интересный, но нафига юзать бинарник я так и не понял — по-мне бы лучше сразу в заголовке константы расписать, чем читать их из файла при старте и не забывать освободить при завершении софтины, а таеже писать методы для извлечения конкретных констант из образа этого бинарника…

Вот видимо XML’ку с описанием вида и состава менюх мне и надо поправить, однако система пользовательского интерфейса оказалась достаточно навороченной и с ходу я смог исправить только половину некрасивостей, остальное я просто не понял что именно надо менять.

Вот для выяснения этого я и решил в кои-то веки воспользоваться студией, рас уж она у меня на тачке есть. Кстати. студию я тож очень редко юзаю, ИМХО там слишком много всего нагромождено и мне не нравится тамошний редактор… Кароче, запустил я это дело — 2008 студию до этого даж толком не смотрел, более-менее пробовал тока 98 и 2005. Что изменилось по сравнению с 2005 сказать не могу — с виду «те же яйца, тока в профиль». Однако там есть отладчик и именно он меня интересовал…

Хм, не так уж и плохо, хотя местами мне показалось странно — в целом упор там сделан на пользование мышкой, что для отладчика ИМХО пустая трата времени на перемещения курсора. Многое делается не просто из меню или панели инструментов, а именно из контекстного меню, что меня вообще сбило с толку (ну благо Keeper подсказал мне как там всёж ставить условия на бряки). Итог — юзать конечно можно, о большинстве полезных фич я наверно и не догадался, но ИМХО обычно можно прожить и без этого. По крайней мере трассировать рекурсивный метод показалось мне не лучшим способом провести вечер и вскоре я уже склепал се необходимые логи, погонял порт и эталон, получив нужные записи — раскурить которые предстоит уже сегодня.

Моё мнение об отладчиках не изменилось — ИМХО это очень нишевый софт и пользоваться им стоит только когда более наглядные методы не прокатывают. Отладчик тоже нагляден и именно в этом его проблема для повсеместного применения, он очень нагляден — там обычно слишком подробно всё, хотя это и можно обойти. А ещё само использование отладчика не всегда технически возможно или может быть затруднено.

ЗЫ: а первый раз я серьёзно пробовал юзать отадчик когда ещё писал на Free Pascal’е в студенческие годы. Это не было лабой или чем-нить подобным — просто писал кое-что «от нех делать» и «для души». Написал по тем временам не мало, при этом почти не пробовал в процессе написания даж собирать — та хрень была интересна мне тока вся и каждую мелочь я не смотрел пока писал остальные. А в итоге оно ессно не заработало, я полез в отладчик и через некоторое время обнаружил баги, которыю пофиксил и не юзал отладчик почти пять дет.

Advertisements

комментария 4 to “Отладчики”

  1. Igor said

    гы :)
    профайлеры тож нужны, они даже денег стоят, хотя есть триал на несколько недель. И профайлеры намного больше нужны.

  2. про профайлеры я вроде и не писал ничего…
    в моём случае это в общем-то бесполезный инструмент — замерать такую инфу можно далеко не на каждом телефоне, а гонять в эмуляторе/симуляторе особого смысла нет. Сейчас вообще ваяем на BREW — тут у нас и телефонов нет, тестить в Феникс отсылаем сборки. К томуж я лишь на портировании — если проблема не касается конкретного телефона а скорее исходит из самого мастера, обычно продюссеру говорится что это уже не наши проблемы и он пинает разработчиков оригинала.

  3. Igor said

    ну фиг знает, когда у тебя непонятный java heap space или загрузка проца под сотню и всё тормозит, в дело вступает профайлер. И он как раз стоит своих денег в общем-то (хотя, кажется, в netbeans есть свой).
    А вот платный дебаггер, мне кажется, ахтунг. Или ты под нишевым имел в виду что-то другое?

  4. Против профайлера я ничего не имею — это и впрямь полезная штука, которая временами просто необходима при написании софта… Вот только я сейчас софт не пишу, а портирую уже написанный — это первое. Т. е. когда нам дают проект, в нём уже не должно быть серьёзных проблем, потому как портировать ещё недописанное былоб странной штукой.

    Второе — целевая платформа у меня — это сотовые телефоны, а там не так всё просто как на компе. Сейчас у нас вообще проект на С++ и он собирается в две штуки — DLL для вендового симулятора BREW и исполняемый файл для реального телефона (нечто типа обрезанного ELF). Причём самих телефонов у нас нет и сборки тестируют на другом берегу Атлантики. Распределение скорости между x86 и ARM естественно разное — некоторые проблемные на компе вещи там сделаны аппаратно и выполняются почти мгновенно, а вот скажем аппаратной математики там куда меньше и многое идёт софтверно.

    Что касается явы, то с ней я тоже только с мобильной работал. Профайлер есть в эмуляторе, но толку с него не много — потому как эмулятор не есть конкретный телефон. Решение лишь одно — вести базу данных по известным моделям. Есть тесты, которые тестеры гоняют на каждом «новом» телефоне и собранная информация доступна прогерам. А то вот только посмотри — скажем кто-то типа как на компе раньше было юзает обычную интерпретацию, некоторые уже используют JIT а ведь есть ещё и Жазелль — примочка к некоторым ARM’ам для почти аппаратного преобразования байткода явы в нативный ассемблер… Соответственно скорости тоже везде разные и с компом не совпадающие.

    Вот по этим причинам я не пользуюсь профайлером — я в большенстве случаев просто физически не могу им замерить исполнение кода на реальном устройстве, а имеющиеся на компе эмуляторы/симуляторы работают совсем по-другому. Похожая хрень и с отладчиками (хотя тут симулятор обычно достоверную информацию даёт), приходится идти другими путями…

    Про халяву — да, в NetBeans есть какой-то профайлер, но я его просто мельком видел и знаю что такая штука там есть. Я и NetBeans-то не пользую уже давно, потому как оно мне не надо…

    Насчёт платных отладчиков — так есть же всякие SoftIce. Кто-то наверно и покупает их, если оно им надо. Но ИМХО это штука далеко не первой необходимости, тем более что каждый полноценный в моём понимании набор разработки уже содержит помимо компилятора ещё отладчик, профайлер и несколько прочих полезностей.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s