Wine - поиск ошибок (скрипт)
Скрипт отладки программ, запускаемых из под Wine, поможет как новичкам для составления вопросов на форумах об ошибках программ, так и для личного использования :) скачать Внимание! Для работы скрипта требуется установленный пакет zenity, присутствует в большинстве дистрибутивов Ubuntu по умолчанию, иначе можете установить его из "Центра приложений Ubuntu или командой sudo apt-get install zenity"
Особенности:
1. В выводимый лог ошибок добавлена служебная информация, которой новички зачастую пренебрегают:
Версия Wine;
Имя дистрибутива Linux и его версия;
Количество оперативной памяти (в мегабайтах);
Информация об имеющихся видеокартах;
OpenGL.
2. Вместо большой "портянки", зачастую не нужных сообщений, выводится более конкретизированная информация об ошибках:
Удалены сообщения класса FIXME (полезны в основном разработчикам);
Удалены одинаковые сообщения;
По умолчанию использованы только класс ERROR для каналов loaddll, file, dll, reg.
3. Имеется возможность использовать в скрипте свой фильтр.
4. Работает как с дефолтным префиксом (.wine), так и с другими (сделанными Вами).
Работа скрипта
Работа скрипта на примере запуска игры SCP-074 из префикса $HOME/SCP:
Помещаем скрипт WD.sh в папку с игрой (программой) и запускаем
Выбираем свой префикс (в моем случае $HOME/SCP)
Выбираем запускающий игру (программу) файл
Выбираем фильтр WINEDEBUG: оставляем по умолчанию, или вписываем свой
После закрытия запущенной в Wine игры (программы), лог ошибок будет записан в файл "Имя_запускаемого_файла.Debug" (находится в папке откуда запущен скрипт).
скрипт WD!.sh
Сам скрипт:
- #!/bin/bash
- # Author: Airvikar <http://ubuntu-wine.ru>
- if ! [ -f /usr/bin/zenity ]
- then
- AHT="Внимание! Для работы скрипта требуется установленный пакет zenity. Можете установить его из \"Центра приложений Ubuntu\" или командой sudo apt-get install zenity."
- echo "Внимание!"
- echo "Для работы скрипта требуется установленный пакет zenity!"
- echo "Можете установить его из \"Центра приложений Ubuntu\""
- echo "или командой sudo apt-get install zenity"
- gnome-terminal -x bash -i -c "echo -en $AHT; sleep 3"
- read
- exit
- else
- echo ""
- fi
- if [[ ! -f /usr/bin/lsb_release ]] ; then
- zenity --error \
- --text="Не установлена утилита lsb-release!"
- exit 0;
- else
- echo ""
- fi
- iWine=`wine --version`
- iUb=`lsb_release -d | sed s/Description/ОС/g`
- iU=`cat /etc/issue`
- iKern=`uname -r`
- iCPU=`cat /proc/cpuinfo | grep "model name"`
- iRAM=`free -m | grep Mem | awk '{ print $2 }'`
- iVGA=`lspci | grep VGA`
- iOpenGL=`glxinfo | grep OpenGL`
- WP=`zenity --width "500" --height "200" --list --radiolist \
- --title="Выбор префикса Wine (по умолчанию папка /.wine)" \
- --text="Какой префикс Wine будете использовать?" \
- --column="Отметить" --column="N" --column="Префикс Wine" --column="Путь" \
- FALSE "1" "Свой префикс" "WINEPREFIX" \
- TRUE "2" "Выбрать установку по умолчанию" "/.wine" \
- --print-column="2"`
- case $? in
- 0) echo "" ;;
- 1) exit ;;
- -1) exit ;;
- esac
- if ! [ $WP = 2 ]; then
- WINEPREF=`zenity --width "600" --height "600" --file-selection \
- --filename=$HOME\/ \
- --directory \
- --title="Выбор Вашего префикса Wine (WINEPREFIX)"`
- case $? in
- 0) WINEPREFIX="$WINEPREF" ;;
- *) exit ;;
- esac
- else
- WINEPREFIX="$HOME/.wine"
- fi
- a=$(readlink -f "$0")
- b=`dirname "$a"`
- GP=`zenity --file-selection \
- --title="Выберите запускающий программу файл (Пример: Game.exe)" \
- --filename="$b/" \
- --file-filter="All file|*.*" \
- --file-filter="Win32|*.bat *.exe *.msi"`
- case $? in
- 0)
- echo "";;
- 1)
- exit;;
- -1)
- exit;;
- esac
- c=${GP##*/}
- e=${c%.exe}
- i=${c%.*}
- wd=`zenity --width "640" --height "200" --list --radiolist \
- --title="Выбор фильтра WINEDEBUG" \
- --text="Какой фильтр будете использовать в WINEDEBUG?" \
- --column="Отметить" --column="N" --column="WINEDEBUG" --column="Фильтр" \
- FALSE "1" "Вписать свой" "WINEDEBUG=fixme-all,..." \
- TRUE "2" "Оставить по умолчанию" "WINEDEBUG=fixme-all,err+loaddll,err+dll,err+file,err+reg" \
- --print-column="2"`
- case $? in
- 0) echo "" ;;
- 1) exit ;;
- -1) exit ;;
- esac
- if ! [ $wd = 2 ]; then
- WINEDEBUG=`zenity --entry --title="Фильтр WINEDEBUG" --text="Введите свой фильтр отладки:" \
- --entry-text="fixme-all,"`
- case $? in
- 0) WINEDEBUG="$WINEDEBUG" ;;
- *) exit ;;
- esac
- else
- WINEDEBUG="fixme-all,err+loaddll,err+dll,err+file,err+reg"
- fi
- > "$c".Debug
- echo "------SYSTEM-------" >> "$c".Debug
- echo "$iWine" >> "$c".Debug
- echo "$iUb" >> "$c".Debug
- echo "$iCPU" >> "$c".Debug
- echo "RAM = $iRAM" >> "$c".Debug
- echo "$iVGA" >> "$c".Debug
- echo "$iOpenGL" >> "$c".Debug
- echo "------------------------" >> "$c".Debug
- echo "" >> "$c".Debug
- echo "WINEDEBUG=$WINEDEBUG" >> "$c".Debug
- echo "" >> "$c".Debug
- echo "------ Program $c ------" >> "$c".Debug
- env WINEPREFIX="$WINEPREFIX" WINEDEBUG=$WINEDEBUG wine start /unix "$GP" 2>&1 | sed '/fixme:*/d' | sed '$!N; /^\(.*\)\n\1$/!P; D' >> "$c".Debug
- deb_text=$(cat "$c.Debug")
- echo "$deb_text" | zenity --text-info --editable \
- --width=600 --height=480 \
- --title="Вывод ошибок для $c (записан в $c.Debug)"
- exit
Источник: http://ubuntu-wine.ru |