четверг, 28 августа 2008 г.

Vacation // Photo

Большие фотографии лежат здесь

Vacation photos // Vityaz bay

Собственно сама бухта и поселок Витязь

Обитатели бухты и ее окресностей

Вид из бухты Астафъева

Бухта Теляковского

Маяк на мысе Гамова

P.S.

Права на фото принадлежат Андрею Лобанову.

среда, 27 августа 2008 г.

m // back online

Вернулся из отпуска.
Провел его с семьей и друзьями в б. Витязь (Росиия, Приморский край, Хасанский район).
Дорога ужастна для моей Honda CR-V (для "люфтованных" сурфов, саффарей и лендкрузеров видимо большой разници нет), но увиденные места стоили того.
На днях размещу фотографии.

среда, 13 августа 2008 г.

Отладка Segmentation fault с GDB

На кроссплатформенном проекте ковырялся с ошибкой возникающей на Linux при завершении системы, а именно Segmentation fault.

Ничего вообщем криминального, просто система многопоточная и ресурсы освобождаются непойми как.

Просто интересен сам сценарий отладки в GDB.

Симптом проблемы такой -> стартуем систему -> ну и собственно закрываем ее по Ctrl+C.

[snikulov@snikulov ~/SVN/trunk/dist]$ ./stream_hub
[hub.3086730960, 15:17:29]: System $Rev: 1120 $ started...
[hub.3086730960, 15:17:30]: MetaInfo receiver started on port 1235
[hub.3063008144, 15:17:30]: RTPReceiver started on URL: udp://@?localport=1234
[hub.3086730960, 15:17:30]: Started HTTP service on port: 9000

<Ctrl>+<C>
Segmentation fault
[snikulov@snikulov ~/SVN/trunk/dist]$

На Win32 она тоже есть, но как-то незаметно - только в консоли отладчика ругнется, что access violation по такому-то адресу, а пользователю ничего не скажет. Не было бы Linux варианта и хай бы с ним :) Но нет ведь - видно, значит надо фиксать.

Запускаем дебажную версию под этим чудом человеческой мысли

[snikulov@snikulov ~/SVN/trunk/dist]$ gdb ./stream_hub
GNU gdb Red Hat Linux (6.5-16.el5rh)
Copyright (C) 2006 Free Software Foundation, Inc.
(gdb) run
Starting program: /home/snikulov/SVN/trunk/dist/stream_hub
[Thread debugging using libthread_db enabled]
[New Thread -1208686896 (LWP 5381)]
[hub.3086280400, 15:35:34]: System $Rev: 1120 $ started...
[New Thread -1208906864 (LWP 5384)]
[New Thread -1221592176 (LWP 5385)]
[New Thread -1232082032 (LWP 5386)]
[hub.3086280400, 15:35:34]: MetaInfo receiver started on port 1235
[hub.3062885264, 15:35:34]: RTPReceiver thread started on URL: udp://@?localport=1234
[New Thread -1242571888 (LWP 5389)]
[New Thread -1253061744 (LWP 5390)]
[New Thread -1264477296 (LWP 5391)]
[New Thread -1274967152 (LWP 5392)]
[New Thread -1285457008 (LWP 5393)]
[New Thread -1295946864 (LWP 5394)]
[New Thread -1306436720 (LWP 5395)]
[New Thread -1316926576 (LWP 5396)]
[New Thread -1327416432 (LWP 5397)]
[hub.3086280400, 15:35:35]: Started HTTP service on port: 9000

<Ctrl>+<C>

Program received signal SIGINT, Interrupt.
[Switching to Thread -1208906864 (LWP 5384)]
0x00b80402 in __kernel_vsyscall ()
(gdb) bt
#0 0x00b80402 in __kernel_vsyscall ()
#1 0x00370ec9 in pthread_sigmask () from /lib/libpthread.so.0
#2 0x00cc7ee9 in pq_block_sigpipe () from /usr/lib/libpq.so.4
#3 0x00cc80a6 in pqsecure_write () from /usr/lib/libpq.so.4
#4 0x00cc0856 in pqReadData () from /usr/lib/libpq.so.4

<куча всего еще, но явно не то>
(gdb) cont
Continuing.
<и ничего - висим>

Как видим, мы не можем так ничего понять, поскольку тут мы не получили SIGSEGV на закрытии программы, а GDB получил SIGINT и наш хэндлер прерывания не сработал.

К счастью есть решение для этого случая в отмене GDB хэндлера

(gdb) handle SIGINT pass print nostop
SIGINT is used by the debugger.
Are you sure you want to change it? (y or n) y
Signal Stop Print Pass to program Description
SIGINT No Yes Yes Interrupt

<запускаем поновой>
(gdb) run
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /home/snikulov/SVN/trunk/dist/stream_hub
[Thread debugging using libthread_db enabled]
[New Thread -1208318256 (LWP 5459)]
[hub.3086649040, 15:49:28]: System $Rev: 1120 $ started...
[New Thread -1208538224 (LWP 5460)]
[New Thread -1221592176 (LWP 5461)]
[New Thread -1232082032 (LWP 5462)]
[hub.3086649040, 15:49:28]: MetaInfo receiver started on port 1235
[hub.3062885264, 15:49:28]: RTPReceiver thread started on URL: udp://@?localport=1234
[New Thread -1242571888 (LWP 5465)]
[New Thread -1253987440 (LWP 5466)]
[New Thread -1264477296 (LWP 5467)]
[New Thread -1274967152 (LWP 5468)]
[New Thread -1285457008 (LWP 5469)]
[New Thread -1295946864 (LWP 5470)]
[New Thread -1306436720 (LWP 5471)]
[New Thread -1316926576 (LWP 5472)]
[New Thread -1327416432 (LWP 5473)]
[hub.3086649040, 15:49:28]: Started HTTP service on port: 9000

Program received signal SIGINT, Interrupt.
[Thread -1327416432 (LWP 5473) exited]
[Thread -1253987440 (LWP 5466) exited]
[Thread -1274967152 (LWP 5468) exited]
[Thread -1285457008 (LWP 5469) exited]
[Thread -1295946864 (LWP 5470) exited]
[Thread -1306436720 (LWP 5471) exited]
[Thread -1316926576 (LWP 5472) exited]
[Thread -1264477296 (LWP 5467) exited]

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread -1221592176 (LWP 5461)]
0x01b67a6c in memcpy () from /lib/libc.so.6

<это уже наш случай - делаем бэктрэйс>

(gdb) bt
#0 0x01b67a6c in memcpy () from /lib/libc.so.6
#1 0x0017a31b in sws_getConstVec () from /usr/local/lib/libswscale.so.0
#2 0x000e1000 in ?? ()
#3 0x00000000 in ?? ()
(gdb)

Отлично, FFMPEG libswscale используется в объекте-скэйлере изображений. Смотрим код - да, там нет проверки на нулевой указатель. Добавляем его - проблема ушла.

Кроме того, полезная команда

(gdb) info handle

скажет вам что будет делать GDB на различные сигналы.

пятница, 1 августа 2008 г.

Microsoft has become a Platinum sponsor of the Apache Software Foundation.

Судя по аннонсу от DevSource, Microsoft решил поддержать ASF как деньгами, так и ресурсами (интерестно, может они еще проспонсируют разработку Linux?).

И все таки, мне новость кажеться позитивной. Хотя и допускаю, что у софтверного гиганта свои планы (не самые чистосердечные).

Возможно, корпорация заинтерсована в интеграции/продвижении своих продуктов (?). Так же вероятна и попытка привлеч разработчиков на платформу .NET (сейчас львиная доля проектов ASF - Java).

Ждем продолжения :)

А тем временем...

BTW, пока я ковыряюсь с интрументами для блогов...
25 июля выложили subversion 1.5.1 с исправлениями и в merge tracking в том числе.
Странно, только, что нет бинарного релиза для win32. Нужно порекомендовать проекту использовать Cmake или Scons ;)

WLW и Blogger

Написав предидущее сообщение ночью, обнаружил на следующий день, что WLW плохо дружит с Blogger. Посему предидущая статья о merge tracking фичи в Subversion 1.5 ушла в драфты, на время изучения инструментария power blogger-ов. Скажем просто - наступило время RTFM. Приношу свои ивинения :)

Осталось проверить Blogger for MS Word и Adobe Contribute.

Может кто посоветует удобный и надежный редактор блогов?
Буду премного благодарен.