Страница 1 из 1
Сбор данных для отладки на компьютере пользователя
Добавлено: 09.03.2017 18:48:21
Sharfik
Уверен что баян и где то обсуждалось.
Ситуация следующая, на Win10 и Win7 программа работает, на Win8 при попытке вызвать окошки которые у меня плагинами реализованы эти окна не открываются, а вылетает ошибка "Деление на ноль".
Как отловить место, если нет среды разработки на проблемной машине?
Re: Сбор данных для отладки на компьютере пользователя
Добавлено: 09.03.2017 19:03:27
zub
Подробный лог или удаленная отладка.
Хотя наврятли поможет:
>>у меня плагинами реализованы эти окна не открываются
Re: Сбор данных для отладки на компьютере пользователя
Добавлено: 09.03.2017 19:11:10
pupsik
https://github.com/beNative/lazarus/tree/master/components/ExceptionLogger возможно чем то поможет.
Добавлено спустя 1 минуту:есть ещё luipack. Вроде как мультилогер.
Re: Сбор данных для отладки на компьютере пользователя
Добавлено: 09.03.2017 19:56:19
zub
>>ExceptionLogger возможно чем то поможет.
Это можно и штатными средствами сделать. я при креше создаю файлик вида
Код: Выделить всё
ZCAD crashed((
Stack trace:
$00000100
$00451B92 GDBCOMMANDMANAGER__RUN, line 553 of ./zcad/commands/uzccommandsmanager.pas
$00451D41 GDBCOMMANDMANAGER__EXECUTE, line 590 of ./zcad/commands/uzccommandsmanager.pas
$00451E30 GDBCOMMANDMANAGER__EXECUTECOMMAND, line 611 of ./zcad/commands/uzccommandsmanager.pas
$006085DA TCLINE__KEYPRESSMY, line 420 of ./zcad/gui/forms/uzcfcommandline.pas
$005507B2 TWINCONTROL__KEYPRESS, line 5673 of ./include/wincontrol.inc
$00550CEA TWINCONTROL__DOKEYPRESS, line 5888 of ./include/wincontrol.inc
$00552F1E TWINCONTROL__CNCHAR, line 7231 of ./include/wincontrol.inc
$0040DEA0
$005500CB TWINCONTROL__WNDPROC, line 5387 of ./include/wincontrol.inc
$005720BE TCUSTOMEDIT__WNDPROC, line 511 of ./include/customedit.inc
$005C9EA9 DELIVERMESSAGE, line 112 of lclmessageglue.pas
$00538B8B TWINDOWPROCHELPER__DOWINDOWPROC, line 2483 of ./win32/win32callback.inc
$005391EB WINDOWPROC, line 2641 of ./win32/win32callback.inc
$769762FA
$76976D3A
$769777C4
Latest log:
Register log module "DEFAULT"
GetSysInfo
ProcessParamStr
end;{ProcessParamStr}
ZCAD log v0.9.8 Revision SVN:Unknown started
Program compiled on Free Pascal Compiler
Program compiled with {$DEFINE BREACKPOINTSONERRORS}
DefaultSystemCodePage:=65001
DefaultUnicodeCodePage:=1200
UTF8CompareLocale:=0
SysParam.ProgramPath="E:\zcad\cad\"
SysParam.TempPath="D:\temp\"
SysParam.ScreenX=2560
SysParam.ScreenY=1440
SysParam.NoSplash=False
SysParam.NoLoadLayout=False
SysParam.UpdatePO=False
SysParam.StandartInterface=False
SysParam.PreloadedFile=""
end;{GetSysInfo}
Register log module "TRANSLATOR"
Register log module "SHX"
GDBPlugins.LoadPlugins("E:\zcad\cad\PLUGINS\")
end;
Register log module "DXF_CONTENTS"
Log end.
Build and runtime info:
ZCAD 0.9.8 Revision SVN:Unknown
Build with Free Pascal Compiler (FPC) v3.1.1
Target CPU: i386
Target OS: Win32
Compile date: 2017/03/07
Compile time: 20:22:08
LCL version: 1.7
Environment version: Windows 6.1 build 7601 Service Pack 1
Program path: E:\zcad\cad\
Temporary path: D:\temp\
end.
Date:
03.17 21:49:59
______________________________________________________________________________________
С стеком и последним логом. Помогает не сильно, но разок выручило, когда пользователь не мог дать рецепт воспроизведения крэша
Re: Сбор данных для отладки на компьютере пользователя
Добавлено: 09.03.2017 21:17:37
Mirage
Надо предусмотреть сохранение стека вызовов (хотя бы в виде просто списка адресов, без инфы об исходниках) при появлении необработанного исключения и либо давать его пользователю, чтобы он отправил разработчику, либо прямо отправлять куда-нибудь.
Такой стек FPC генерит, надо лишь его заполучить.
По стеку вызовов уже можно определить место.
zub писал(а):я при креше создаю файлик вида
А это разве работает без отладочной информации в екзешнике?
Re: Сбор данных для отладки на компьютере пользователя
Добавлено: 10.03.2017 00:57:35
zub
>>А это разве работает без отладочной информации в екзешнике?
Конечно нет. отладочная инфа должна присутствовать, ,без отладочной инфы будет просто список адресов, без расшифровки
Re: Сбор данных для отладки на компьютере пользователя
Добавлено: 10.03.2017 01:02:52
Sharfik
zub писал(а):Это можно и штатными средствами сделать. я при креше создаю файлик вида
Описание этой функции где искать? Точнее как называется в доках?
Re: Сбор данных для отладки на компьютере пользователя
Добавлено: 10.03.2017 02:20:35
zub
BackTraceStrFunc
приложил примерный проект. Вот только совсем недавно (какраз в районе 3.0) были проблемы: все хорошо работало, но закомитили "оптимизацию" преобразования адреса в строку, эта оптимизация сделала возможным получение стека только один раз и после штатного fpc обработчика уже ловить стало нечего. потом появилась возможность отключить эту оптимизацию AllowReuseOfLineInfoData:=false. Это баг описан тут
http://bugs.freepascal.org/view.php?id=28288Если ловить вылет надо в секциях инициализации модулей то способ назначения обработчика из примера не подойдет - слишком поздно срабатывает, когда всё уже проинициализировано. тут придется пользоваться fpc а не lcl механизмами назначения обработчика.
Запускать пример нужно без лазаря, в лазаре свой обработчик исключений. Также хз как это всё отработает с дллками. Естественно и главная программа и "плагины" должны быть собраны с отладочной инфой
Re: Сбор данных для отладки на компьютере пользователя
Добавлено: 11.03.2017 13:04:24
vitaly_l
zub писал(а): CrashedForm.7z
не запускается на версии 1.62, ругается, что-то какую-то DesignTimePPI переменную не может найти.
pupsik писал(а):https://github.com/beNative/lazarus/tree/master/components/ExceptionLogger возможно чем то поможет.
ПО этим ID, где-то можно посмотреть место сбоя?
И второй, вопрос, про Call Stack. В примере, если открыть закладку Call Stack, то видно название функции в которой произошёл сбой и ещё всякая сопутствующая информация с адресами.
Однако, в моей программе, у ExceptionLogger - выводятся только адреса.
Сгенерил программу с отладочной информацией, но всё равно - выводит только адреса.

Что нужно включить, чтобы показало название функции в месте сбоя, как в примере у ExceptionLogger?
.
Re: Сбор данных для отладки на компьютере пользователя
Добавлено: 11.03.2017 18:04:38
zub
vitaly_l
Удали упоминания о DesignTimePPI из lfm - заработает.
>>Сгенерил программу с отладочной информацией, но всё равно - выводит только адреса.
похоже на описаный мной баг. емнип 3.0 какраз с ним вышел. какой компилятор?
Re: Сбор данных для отладки на компьютере пользователя
Добавлено: 11.03.2017 18:51:10
vitaly_l
zub писал(а):Удали упоминания о DesignTimePPI из lfm
да.
zub писал(а):какой компилятор?
версия 3.0 - и увы: crashreport - не пишет ничего кроме адресов. обидно, но менять FPC пока не хочу, т.к. всё работает без сбоев.

Потом попробую, когда релиз выйдет. Главное что теперь сам инструмент есть и знаешь где инструмент лежит

.
Re: Сбор данных для отладки на компьютере пользователя
Добавлено: 12.03.2017 00:36:34
zub
Ну дак 3.0.2 вроде как вышел. И lazarus 1.6.4 основанный на нем тоже вышел.
Вообще, на данном этапе развития fpc и lazarus свн версии предпочтительней, а про стабильность релизов и нестабильность транка - это всё сказки
Re: Сбор данных для отладки на компьютере пользователя
Добавлено: 13.03.2017 01:46:56
zub
Проверил в 1.6.4 - работает, только нужно подправить версию fpc в ифдефе
Код: Выделить всё
{$if FPC_FULlVERSION>=30002}
AllowReuseOfLineInfoData:=false;
//появилось нетак давно, отключает "оптимизации" при преобразовании
//стека в строчку исходников, объявлено в модуле lineinfo
//если AllowReuseOfLineInfoDat присутствует - лучше выставить его в false
{$endif}