Я думаю сложно найти программу без ошибок. Так уж случилось что Валентина тоже не лишена этого недостатка. Сказывается отсутствие опыта, тестирования, времени. Некоторые ошибки вообще сложно вычислить.
Я решил написать эту заметку что бы показать что я знаю о их существовании и работаю над их решением.
Вообще я стараюсь найти связь с людьми которые пытаются использовать программу, но пока это дает мало результата. Слишком мало опытных людей используют программу, что бы сообщить об ошибке мне или на сайте.
Выходом из ситуации стала автоматическая отсылка сообщений об ошибках, как делают многие программы. Но выяснилось, что универсального решения нет. Не буду вдаваться в подробности, скажу только, что никто еще не создал инструмент который поддерживает весь зоопарк систем и компиляторов. Долго я бился над этой проблемой, но в конце, посмотрев на статистику скачиваний, принял решение сделать эту функцию только для Windows систем.
Отчеты об ошибках представляют из себя обычные текстовые файлы которые генерируются после каждого краха программы. Отсылка происходит после следующего запуска программы автоматически.
Пример файла отчета:
------------------- Error occured on Thursday, November 13, 2014 at 13:39:51. C:\pack\valentina\valentina.exe caused an Access Violation at location 00555689 in module C:\pack\valentina\valentina.exe Reading from location 00000000. Registers: eax=00555680 ebx=01156208 ecx=0022fdd0 edx=00000000 esi=0022d108 edi=0022fdd0 eip=00555689 esp=0022cfe0 ebp=0022d068 iopl=0 nv up ei pl nz na pe nc cs=001b ss=0023 ds=0023 es=0023 fs=0038 gs=0000 efl=00010202 AddrPC Params 00555689 00000001 01156208 0022FDD0 valentina.exe!MainWindow::Open() [C:\build-Valentina-Desktop_Qt_5_3_MinGW_32bit-Release\src\app/../../../Valentina/src/app/mainwindow.cpp @ 1349] 68A56D28 00D585C0 00000003 00000004 Qt5Core.dll!QMetaObject::activate(QObject*, int, int, void**) 61DC3BA7 00000000 00DF01C0 0022D178 Qt5Widgets.dll!QAction::activate(QAction::ActionEvent) 61F24B66 0022D1A8 00D585C0 00000000 Qt5Widgets.dll!QMenu::setIcon(QIcon const&) 61F2A195 00D585C0 00000000 00000001 Qt5Widgets.dll!QMenu::internalDelayedPopup() 61F2E888 0022D670 0022D588 7C9101DB Qt5Widgets.dll!QMenu::mouseReleaseEvent(QMouseEvent*) 61E0150A 0022D670 0022D310 0022D2F8 Qt5Widgets.dll!QWidget::event(QEvent*) 61F2F04A 0022D670 0022D670 0022D4D8 Qt5Widgets.dll!QMenu::event(QEvent*) 61DC847E 00DF0060 0022D670 0022D698 Qt5Widgets.dll!QApplicationPrivate::notify_helper(QObject*, QEvent*) 61DCDBC5 00DF0060 0022D670 61B38F30 Qt5Widgets.dll!QApplication::notify(QObject*, QEvent*) 005453DE 00DF0060 0022D670 00000000 valentina.exe!VApplication::notify(QObject*, QEvent*) [C:\build-Valentina-Desktop_Qt_5_3_MinGW_32bit-Release\src\app/../../../Valentina/src/app/core/vapplication.cpp @ 117] 68A37F91 00DF0060 0022D670 0022D5C8 Qt5Core.dll!QCoreApplication::notifyInternal(QObject*, QEvent*) 61DCC07B 00DF0060 0022D670 00000000 Qt5Widgets.dll!QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool) 61E1ADD1 0022DA10 7C91019B 7C9101DB Qt5Widgets.dll!non-virtual thunk to QWidget::metric(QPaintDevice::PaintDeviceMetric) const 61E1D3D2 0022DA10 0022DA10 0022D8C8 Qt5Widgets.dll!non-virtual thunk to QWidget::metric(QPaintDevice::PaintDeviceMetric) const 61DC847E 011CC1D0 0022DA10 0022D808 Qt5Widgets.dll!QApplicationPrivate::notify_helper(QObject*, QEvent*) 61DCD097 011CC1D0 0022DA10 0022D928 Qt5Widgets.dll!QApplication::notify(QObject*, QEvent*) 005453DE 011CC1D0 0022DA10 00000048 valentina.exe!VApplication::notify(QObject*, QEvent*) [C:\build-Valentina-Desktop_Qt_5_3_MinGW_32bit-Release\src\app/../../../Valentina/src/app/core/vapplication.cpp @ 117] 68A37F91 011CC1D0 0022DA10 0022D9C0 Qt5Core.dll!QCoreApplication::notifyInternal(QObject*, QEvent*) 6195E8C3 7FFDF000 00030000 0115CAD0 Qt5Gui.dll!QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) 61960098 011D8E28 0022DB60 7E368B26 Qt5Gui.dll!QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) 61949C6E 00000000 00000000 0022DCA8 Qt5Gui.dll!QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) 6A8A7B07 00000000 00000001 7E368734 qwindows.dll 7E368734 68A7E550 001601B8 00000401 USER32.dll!GetDC 7E368816 00000000 68A7E550 001601B8 USER32.dll!GetDC 7E3689CD 0022DD88 00000000 0022FAC8 USER32.dll!GetWindowLongW 7E368A10 0022DD88 0022DD88 00000000 USER32.dll!DispatchMessageW 68A7E1A8 77C1C02D 0022FAC0 0022FB70 Qt5Core.dll!QEventDispatcherWin32::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) 6A8A7C07 0022FD00 011912A8 011912A8 qwindows.dll 68A3706C 00000000 0022FDD0 80000000 Qt5Core.dll!QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) 68A3D3B2 0022FCA4 0022FCA0 0022FCF0 Qt5Core.dll!QCoreApplication::exec() 0054815F 00000001 003E8820 003EC0F0 valentina.exe!~QStringList [C:\build-Valentina-Desktop_Qt_5_3_MinGW_32bit-Release\src\app/../../../Qt/Qt5.3.2/5.3/mingw482_32/include/QtCore/qstringlist.h @ 61] 00570C50 00400000 00000000 0024238A valentina.exe 005F261D 003E81E8 00000020 00000001 valentina.exe 004013DE 022DD90C 00000018 7FFDD000 valentina.exe 7C817077 004014C0 00000000 78746341 kernel32.dll!RegisterWaitForInputIdle
Те кто скачали последнюю доступную версию для Windows Valentina-0.2.8.1173-alpha уже имеют эту функцию на борту.
За время роботы функции я получил около 30 сообщений об ошибках и обнаружил что информации доступной в отчете не достаточно.
Пришлось заняться созданием лога. В следующей тестовой сборке, которая скоро выйдет, в каждый отчет будет также добавляться лог файл. Это конечно увеличит размер отчета, но нечего не поделаешь.
Прошлые отчеты не пропали даром. Я постарался их проанализировать и добавить логирование в те места которые были задействованы в отчете.
Те кто не желает отсылать отчеты об ошибках может отключить эту функцию в настройках программы. В этом случае программа будет аккуратно коллекционировать в папочке reports все отчеты, не отсылая их. Это сделано на случай того, что пользователь захочет сам отправить сообщение об ошибке. Найти ее можно в папке с программой.
Не знаю, или кто заметил, но так же с этим нововведение связана необходимость таскать с программой отладочную информацию. Без нее отчет это просто мусор. Поэтому размер установщика для Windows сейчас самый большой.
Комментариев нет:
Отправить комментарий