# Как сообщать об ошибках

Хорошие сообщения об ошибках вносят значительный вклад в разработку любого программного продукта. Но, как и написание хорошей программы, хорошее сообщение об ошибке включает в себя некую долю работы. Пожалуйста, осознайте, что большинство разработчиков — занятые люди, получающие огромное количество писем. Поэтому, хотя Ваши отзывы необходимы для улучшения MPlayer'а, хотя они очень приветствуются, пожалуйста поймите, что Вы должны предоставить всю требуемую нами информацию, поэтому точно следуйте инструкциям в этом документе.

## Отчеты об ошибках безопасности

В случае, если Вы нашли уязвимость и хотите позволить нам исправить ее до того, как она будет обнародована, мы будем рады получить Ваше уведомление по адресу security@mplayerhq.hu. Пожалуйста добавьте [SECURITY] или [ADVISORY] к теме письма. Убедитесь, что Ваш отчет содержит полный и подробный анализ ошибки. Желательно также прислать и исправление уязвимости. Пожалуйста, не откладывайте отчет для написания подтверждающего ошибку эксплойта. Вы можете отослать его позже другим письмом.

## Как исправить ошибку

Если Вы ощущаете в себе достаточно сил и умения для самостоятельного решения проблемы, пожалуйста, сделайте это. Или может быть Вы уже это сделали? Пожалуйста, прочитайте этот короткий документ, чтобы узнать, как сделать так, чтобы Ваш код включили в MPlayer. Люди из рассылки mplayer-dev-eng помогут Вам, если у Вас есть вопросы.

## Как провести проверку на деградацию, используя Subversion

Иногда возникает проблема 'раньше это работало, а теперь - нет'. Здесь представлена пошаговая процедура определения момента возникновения ошибки. Но она не для рядовых пользователей.

Во-первых, Вам нужно получить исходный код MPlayer из Subversion. Инструкции могут быть найдены в разделе Subversion страницы закачки.

После этого в каталоге mplayer/ Вы будете иметь образ дерева Subversion. Теперь обновите этот образ на желаемую дату:

    cd mplayer/
    svn update -r {"2004-08-23"}

Формат даты: YYYY-MM-DD HH:MM:SS. Использование этого формата, гарантирует, что Вы сможете извлечь патчи по дате их внесения, которые указаны в архиве MPlayer-cvslog.

Далее выполняйте как при обычном обновлении:

    ./configure
    make

Для непрограммистов, читающих эту страницу, сообщим, то самый быстрый способ найти место возникновения ошибки — использование бинарного поиска, т.е. поиск даты, деля интервал поиска пополам раз за разом. Например, если проблема возникла в 2003 году, начните с середины года и выясните присутствует ли проблема. Если да, то переходите к проверке начала Апреля, иначе — к началу Октября. Повторяйте этот процесс, уменьшая интервал поиска вдвое, пока не выясните искомую дату.

Если у Вас имеется достаточно свободного места на жестком диске (полная компиляция требует около 100Мб, или 300-350 если включена отладочная информация), скопируйте последнюю работающую версию перед обновлением, это сэкономит время при необходимости вернуться назад. (Как правило необходимо выполнять 'make distclean' до перекомпиляции более ранней версии, поэтому при отсутствии сохраненной копии Вам придется перекомпилировать весь проект.) Также Вы можете использовать ccache для ускорения компиляции.

Как только Вы нашли дату, продолжайте поиск, используя архив mplayer-cvslog (отсортированный по дате) до получения более точного времени, включая час, минуту, секунду:

    svn update -r {"2004-08-23 15:17:25"}

Это позволит легко выделить патч, явившийся источником проблемы.

Если Вы нашли нужный патч, то Вы практически победили; сообщите о нем в MPlayer Bugzilla или подпишитесь на MPlayer-users и отправте сообщение туда. Есть шанс, что автор исправит ошибку. Вы также можете долго и пристально вглядываться в патч, пока сами не увидите ошибку :).

## Как сообщить об ошибке

Прежде всего, пожалуйста, попробуйте использовать новейшую Subversion версию MPlayer'а, поскольку Ваша ошибка уже может быть исправлена. Разработка продвигается очень быстро, большинство проблем в официальных релизах сообщается в течение дней, и даже часов, после релиза, поэтому, пожалуйста, для сообщений об ошибках используйте только Subversion. Это включает и бинарные пакеты MPlayer'а. Вы найдёте инструкции по Subversion внизу этой страницы или в README. Если это не помогло, пожалуйста, обратитесь к остальной документации. Если Ваша проблема не известна или не решается с помощью наших инструкций, пожалуйста, сообщите об ошибке.

Пожалуйста, не присылайте сообщения об ошибках лично какому-нибудь разработчику. Это командная работа, и, поэтому, Вашим сообщением могут заинтересоваться несколько человек. Довольно часто бывает, что пользователи уже сталкивались с Вашей проблемой и знают, как обойти проблему, даже если это ошибка в коде MPlayer'а.

Пожалуйста, опишите Вашу проблему настолько подробно, насколько возможно. Проведите маленькое расследование, чтобы выяснить условия, при которых возникает проблема. Проявляется ли ошибка только в каких-то конкретных ситуациях? Она специфична только для каких-то файлов или типов файлов? Происходит ли это с каким-то одним кодеком, или это не зависит от кодека? Можете ли Вы воспроизвести это со всеми драйверами вывода? Чем больше Вы предоставите информации, тем выше вероятность того, что мы сможем исправить ошибку. Пожалуйста, не забудьте включить важную информацию, которую мы просим ниже, иначе мы не сможем должным образом диагностировать Вашу проблему.

Великолепное, отлично написанное руководство по задаванию вопросов на общедоступных форумах — это How To Ask Questions The Smart Way[Как Задавать Вопросы. Правильный Путь.], написанное Eric S. Raymond. Есть и другое — How to Report Bugs Effectively[Как Эффективно Сообщить об Ошибке], написанное Simon Tatham. Если Вы будете следовать этим указаниям, Вы сможете получить помощь. Но, пожалуйста, учтите, что мы добровольно отслеживаем рассылки в свободное время. Мы очень заняты и не можем гарантировать, что Вы получите решение для Вашей проблемы (или хотя бы ответ).

## Куда сообщать об ошибках

Подпишитесь на рассылку mplayer-users: и отошлите Ваше сообщение на: , где Вы сможете его обсудить.

Или, если хотите, Вы можете использовать нашу новую Bugzilla.

Язык этой рассылки — английский. Пожалуйста, следуйте стандарту Netiquette Guidelines[Руководство по Сетевому Этикету] и не присылайте HTML почту ни на какую из наших рассылок. Вас просто проигнорируют или забанят. Если Вы хотите узнать, что такое HTML почта и почему это — зло, прочтите этот документ. Он объяснит Вам все детали и содержит инструкции по отключению HTML. Также обратите внимание, что мы не будем индивидуально CC (отсылать копии) людям, а поэтому подписаться — хорошая идея, если Вы хотите получить ответ.

## Что сообщать

Вам необходимо включить лог, конфигурацию или примеры файлов в сообщение об ошибке. Если что-то из этого большое, то лучше загрузить это на наш HTTP сервер в сжатом виде (предпочтительно gzip или bzip2) и включить в сообщение об ошибке только путь и имя файла. На наших рассылках стоит ограничение размера сообщения в 80КБ. Если у Вас что-то большее, то сожмите или загрузите это.

### Системная информация

- Ваш дистрибутив Linux или операционная система и версия, например:

  - Red Hat 7.1

  - Slackware 7.0 + пакеты разработки из 7.1 ...

- версию ядра:

      uname -a

- версию libc:

      ls -l /lib/libc[.-]*

- версии gcc и ld:

      gcc -v
      ld -v

- версия binutils:

      as --version

- Если у Вас проблемы с полноэкранным режимом:

  - Тип оконного менеджера и версия

- Если у Вас проблема с XVIDIX:

  - глубина цвета X'ов:

        xdpyinfo | grep "depth of root"

- Если глючит только GUI:

  - версия GTK

  - версия GLIB

  - ситуация с GUI, в которых проявляется проблема

### Аппаратура и драйверы

- Информация о CPU (это сработает только под Linux):

      cat /proc/cpuinfo

- Производитель и модель видео карты, например:

  - ASUS V3800U чип: nVidia TNT2 Ultra pro 32MB SDRAM

  - Matrox G400 DH 32MB SGRAM

- Тип драйвера и версия, например:

  - Встроенный в X'ы

  - nVidia 0.9.623

  - Utah-GLX CVS 2001-02-17

  - DRI из X 4.0.3

- Тип и драйвер звуковой карты, например:

  - Creative SBLive! Gold с OSS драйверами от oss.creative.com

  - Creative SB16 с OSS драйверами из ядра

  - GUS PnP с ALSA OSS эмуляцией

- Если Вы сомневаетесь, на Linux системах включите вывод `lspci -vv`.

### Проблемы конфигурации

Если Вы получаете ошибку при выполнении `./configure`, или если автоопределение чего-то не срабатывает, прочитайте `config.log` . Там Вы можете обнаружить ответ, например если у Вас стоят несколько версий одной библиотеки, или если Вы забыли установить пакет разработки (тот самый, с суффиксом -dev). Если Вы думаете, что это ошибка, включите в сообщение файл `config.log`.

### Проблемы компиляции

Пожалуйста, включите эти файлы:

- config.h

- config.mak

### Проблемы при воспроизведении

Пожалуйста, включите вывод MPlayer'а с уровнем "избыточности" [verbose] 1, но запомните: не сокращайте вывод, когда Вы его вставляете в почту. Разработчикам понадобятся все сообщения, чтобы правильно диагностировать проблему. Вы можете направить вывод в файл, например так:

    mplayer -v опции имя-файла > mplayer.log 2>&1

Если проблема специфична для одного или нескольких файлов, пожалуйста, загрузите проблемные файлы на:

Также загрузите маленький текстовый файл с базовым именем как у Вашего файла и расширением `.txt`. Опишите проблему, возникающую у Вас с соответствующим файлом и включите Ваш электронный адрес и вывод MPlayer'а с уровнем "избыточности" 1. Обычно первых 1-5 МБ файла бывает достаточно, чтобы воспроизвести проблему, но чтобы быть уверенными, мы просим Вас сделать:

    dd if=Ваш-файл of=малый-файл bs=1024k count=5

Это запишет первые 5 МБ 'Вашего-файла' в файл 'малый-файл'. Теперь снова попытайтесь с эти маленьким файлом, и если проблема все ещё проявляется, тогда этого примера будет достаточно для нас. Пожалуйста, никогда не отсылайте эти файлы по почте! Загрузите его и отошлите только путь/имя файла на FTP-сервере. Если файл доступен по сети, тогда просто пришлите точный URL, и этого будет достаточно.

### Падения

Вы должны запустить MPlayer внутри `gdb` и прислать нам полный вывод, или , если у Вас есть дамп поломки `core`, Вы можете извлечь необходимую полезную информацию из файла core. Вот как:

#### Как сохранить информацию о воспроизводимом падении

Перекомпилируйте MPlayer с включённым кодом отладки:

    ./configure --enable-debug=3
    make

и запустите MPlayer внутри gdb:

    gdb ./mplayer

Теперь Вы в gdb. Наберите:

    run -v опции-для-mplayer имя-файла

и воспроизведите крах программы. Как только Вы это сделаете, gdb вернёт Вас к приглашению командной строки, где Вы должны набрать

    bt
    disass $pc-32,$pc+32
    info all-registers

#### Как извлечь полезную информацию из дампа core

Создайте следующий командный файл:

    bt
    disass $pc-32,$pc+32
    info all-registers

Теперь просто выполните такую команду:

    gdb mplayer --core=core -batch --command=командный-файл > mplayer.bug

## Я знаю, что я делаю...

Если Вы создали правильное сообщение об ошибке так, как рассказано выше, и Вы уверены, что это ошибка в MPlayer'е, а не ошибка компилятора или плохой файл, Вы уже прочли всю документацию и не можете найти решение, Ваши звуковые драйвера в порядке, тогда Вы можете подписаться на рассылку mplayer-advusers и прислать сообщение об ошибке туда, чтобы получить более точный и быстрый ответ.

Обратите внимание, что если Вы будете отсылать туда вопросы новичков или вопросы, на которые ответы присутствуют в документации, то Вас проигнорируют или обругают вместо того, чтобы ответить. Поэтому не заваливайте нас мелочами и подписывайтесь на -advusers только, если Вы действительно знаете, что Вы делаете, и ощущаете себя продвинутым пользователем или разработчиком MPlayer'а. Если подходите под этот критерий, Вам не составит труда понять, как надо подписаться...