(no subject)

Mar 25, 2006 23:48

Интернета нет. Отключили телефон за неуплату. Включат не скоро, дней через десять где-то. Жаль, жаль, жаль... Ну да пока не скучаю, раз время есть :)


Сейчас вот сел и решил зафиксить давно раздражавший меня баг: при создании или обновлении базы с музыкой mpd всё выводит в UTF8. У меня же вражеская CP1251 и я, естественно, вижу кракозябры :( В нашу багзиллу я даже по этому поводу вешал баг #8655.

Так вот. Я сам от себя в шоке как легко его удалось найти и зафиксить! :) Сначала думал разобраться по исходникам, но что-то через пять минуток утомился и решил, что запутался, хотя, как потом выяснилось, я шел по верному пути. Тогда я решил использовать отладчик. Не скажу, чтобы я слишком умел пользоваться gdb, но мне и понадобилось-то всего команды 4: br, r[un], n[ext], p[rint]. Вот и весь мой скудный арсенал :)

Делал весьма просто: скомпилил с отладкой (--enable-debug), запустил под gdb (gdb ./src/mpd), далее поставил точку останова на функции main (надо же с чего-то начать?) - br main. Потом запустил mpd уже на выполнение с опцией при которой я и получал на терминале кракозябры - r --create-db. Потом долго нажимал n и смотрел что там вслед за чем вызывается. В какой-то момент у меня побежали эти кракозябры. Я смотрю после какой функции это произошло. Потом начинаю весь процесс с самого начала, только уже не для точки останова ставлю не ф-цию main, а ту во время выполнения которой кракозябры и печатаются. И так я спускался по иерархии ф-ций раз 5 пока не дошел до ф-ции в которой вывод и осуществляется. Попутно я просматривал в редакторе код той ф-ции, которую отлаживаю. Кстати, это помогло, так как я там приметил функцию utf8ToFsCharset, для перевода строки из UTF8 в кодировку пользователя. Потом мне оставалось лишь в месте где выводится название песни лишь добавить для каждой вызов этой ф-ции для перекодировки. Вообщем, «это было не трудно, это по любви» ;-)

Вот такая история. Какая из всего этого мораль? Их несколько:

1) я молодец. И вообще думаю, что если бы меня не любили и не хвалили, то я бы таким не был. Так что спасибо вам, мои дорогие, за то, что помогаете мне жить и самосовершенствоваться! :) Также спасибо Богу! :)

2) на этом примере мы видим преимущество Open Source. Когда те кто могут залезть в исходный код и поправить - залазят и правят, а потом автору патчи высылают. В этом вся сила, друзья!

3) да, я сам в шоке и очень рад, что вот так получилось и что я помог Опену Соурсу ;))) Прям аж мега приятно. Но в данный момент никого рядом нет, кто бы мог разделить со мной радость. Увы...

Патч на people выложу когда появится интернет, а пока он доступен в багзилле. Автору тоже обязательно отправлю.

Cheers, господа и дамы!

Updated(12092006): fix tag
Updated(24032008): fix typo

programming, life, gdb, mpd

Previous post Next post
Up