logs / profilers vs bugs

Всичко за програмирането на игри - архитектура, графика, звук, изкуствен интелект, мрежи.
Потребителски аватар
stoiko
Power User
Power User
Мнения: 617
Регистриран: 04 дек 2003 15:44
Контакти:

logs / profilers vs bugs

Мнение от stoiko » 16 яну 2012 15:53

Имам проста обвивка на Freetype която кешира глифовете в текстура. Въпросната текстура се ре-ъплоадва във видео паметта при всяка промяна. След като добавих "елементарен" фичър се оказа че въпросната текстура се ъплоудва всеки кадър. Открих бъга съвсем случайно, когато реших да увелича размера на текстурата с един порядък. Този бъг нямаше да бъде "изпуснат" ако логвах въпросния ъплоуд (както логвам ъплоуда на всички текстури заредени от файл) или бях засякъл времето което приложението прекарва извън драйвера на видеото. Имам няколко въпроса:

Как борите подобни бъгове?
Дайте списък (с приоритети?) с неща които си струват логването.
Как профилирате?
Ползвате ли профайлър преди да стигнете до бета версия?

Потребителски аватар
Kerberos
Power User
Power User
Мнения: 234
Регистриран: 24 фев 2005 16:08
Местоположение: София
Контакти:

Re: logs / profilers vs bugs

Мнение от Kerberos » 16 яну 2012 17:35

valgrind + gprof, имам си тестове, които се изпълняват автоматично на компилция с опция примерно help-a на билд скрипта ми е:

Код: Избери всички

scons: Reading SConscript files ...
scons: done reading SConscript files.

doxygen: Set to 1 or y or yes to call doxygen (yes|no)
    default: False
    actual: False

colorizer: Use colorizer builder (yes|no)
    default: True
    actual: False

debug: debug output and symbols (yes|no)
    default: False
    actual: True

optimize: optimization levels (0|1|2|3|s)
    default: 0
    actual: 0

valgrind: Set to 1 or y or yes to call valgrind (yes|no)
    default: False
    actual: True

profile: Build with profiling on (yes|no)
    default: False
    actual: False

pyc: Compile all python modules (yes|no)
    default: False
    actual: False

bits32: Compile in 32bit mode (yes|no)
    default: False
    actual: False

test: Run Unit tests (yes|no)
    default: True
    actual: False

Use scons -H for help about command-line options.
Когато му дам profile=1 и/или valgrind=1 автоматино изпълнява няколко теста, записва данните от профлирането в tmp файлове, които после автоматично се минават през скрипт за human readable формат. Предполагам, че си запознат с двата туула и няма да ги коментирам на широко, само ще спомена, че gprof веднага би ти извадил статистика с броя извиквания и времената на функциите. И като видиш в тоя списък няколко милиона извиквания на въпросната функция ще ти стане ясно какво става.

gemicha
Site Admin
Site Admin
Мнения: 2930
Регистриран: 20 ное 2003 22:20
Местоположение: USA

Re: logs / profilers vs bugs

Мнение от gemicha » 16 яну 2012 22:58

Ако работиш и на Windows може да използваш xperf/GPUView. Там се вижда всичко, което се случва и с GPU-то. А файлът, който се генерира може да го използваш за изчисления кати примерно колко данни се качат на кадър. И много други полезни неща.

Потребителски аватар
Zemedelec
Power User
Power User
Мнения: 782
Регистриран: 08 дек 2003 15:45
Контакти:

Re: logs / profilers vs bugs

Мнение от Zemedelec » 31 яну 2012 22:06

Каунтери в по-чуствителните операции, примерно почти всичко освен елементарния setup на API-то + режим да показва каунтерите (ненулевите) в интервал от секунда примерно.
Виждат се неща като ненормални алокации при някакво действие, непонятни аплоуди като твоя и подобно.
Ако се добави и средно/максимално време, се ловят и други работи.
При нас, ако си спомняш имаше макрос, който можеше да брои влизания на кадър и средно, минимално и максимално време за дадена секция от кода.

Отговори