Сбор данных для отладки на компьютере пользователя

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Сбор данных для отладки на компьютере пользователя

Сообщение Sharfik » 09.03.2017 19:48:21

Уверен что баян и где то обсуждалось.

Ситуация следующая, на Win10 и Win7 программа работает, на Win8 при попытке вызвать окошки которые у меня плагинами реализованы эти окна не открываются, а вылетает ошибка "Деление на ноль".
Как отловить место, если нет среды разработки на проблемной машине?
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 791
Зарегистрирован: 20.07.2013 01:04:30

Re: Сбор данных для отладки на компьютере пользователя

Сообщение zub » 09.03.2017 20:03:27

Подробный лог или удаленная отладка.
Хотя наврятли поможет:
>>у меня плагинами реализованы эти окна не открываются
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

Re: Сбор данных для отладки на компьютере пользователя

Сообщение pupsik » 09.03.2017 20:10:10

https://github.com/beNative/lazarus/tree/master/components/ExceptionLogger возможно чем то поможет.

Добавлено спустя 1 минуту:
есть ещё luipack. Вроде как мультилогер.
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Сбор данных для отладки на компьютере пользователя

Сообщение zub » 09.03.2017 20:56:19

>>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
______________________________________________________________________________________

С стеком и последним логом. Помогает не сильно, но разок выручило, когда пользователь не мог дать рецепт воспроизведения крэша
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

Re: Сбор данных для отладки на компьютере пользователя

Сообщение Mirage » 09.03.2017 22:17:37

Надо предусмотреть сохранение стека вызовов (хотя бы в виде просто списка адресов, без инфы об исходниках) при появлении необработанного исключения и либо давать его пользователю, чтобы он отправил разработчику, либо прямо отправлять куда-нибудь.
Такой стек FPC генерит, надо лишь его заполучить.
По стеку вызовов уже можно определить место.

zub писал(а):я при креше создаю файлик вида

А это разве работает без отладочной информации в екзешнике?
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Re: Сбор данных для отладки на компьютере пользователя

Сообщение zub » 10.03.2017 01:57:35

>>А это разве работает без отладочной информации в екзешнике?
Конечно нет. отладочная инфа должна присутствовать, ,без отладочной инфы будет просто список адресов, без расшифровки
Последний раз редактировалось zub 10.03.2017 02:18:24, всего редактировалось 1 раз.
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

Re: Сбор данных для отладки на компьютере пользователя

Сообщение Sharfik » 10.03.2017 02:02:52

zub писал(а):Это можно и штатными средствами сделать. я при креше создаю файлик вида

Описание этой функции где искать? Точнее как называется в доках?
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 791
Зарегистрирован: 20.07.2013 01:04:30

Re: Сбор данных для отладки на компьютере пользователя

Сообщение zub » 10.03.2017 03:20:35

BackTraceStrFunc
приложил примерный проект. Вот только совсем недавно (какраз в районе 3.0) были проблемы: все хорошо работало, но закомитили "оптимизацию" преобразования адреса в строку, эта оптимизация сделала возможным получение стека только один раз и после штатного fpc обработчика уже ловить стало нечего. потом появилась возможность отключить эту оптимизацию AllowReuseOfLineInfoData:=false. Это баг описан тут http://bugs.freepascal.org/view.php?id=28288

Если ловить вылет надо в секциях инициализации модулей то способ назначения обработчика из примера не подойдет - слишком поздно срабатывает, когда всё уже проинициализировано. тут придется пользоваться fpc а не lcl механизмами назначения обработчика.

Запускать пример нужно без лазаря, в лазаре свой обработчик исключений. Также хз как это всё отработает с дллками. Естественно и главная программа и "плагины" должны быть собраны с отладочной инфой
Вложения
CrashedForm.7z
(59.49 КБ) Скачиваний: 469
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

Re: Сбор данных для отладки на компьютере пользователя

Сообщение vitaly_l » 11.03.2017 14:04:24

zub писал(а): CrashedForm.7z

не запускается на версии 1.62, ругается, что-то какую-то DesignTimePPI переменную не может найти.

pupsik писал(а):https://github.com/beNative/lazarus/tree/master/components/ExceptionLogger возможно чем то поможет.

Код: Выделить всё
Process ID: 4328
Thread ID: 4228

ПО этим ID, где-то можно посмотреть место сбоя?

И второй, вопрос, про Call Stack. В примере, если открыть закладку Call Stack, то видно название функции в которой произошёл сбой и ещё всякая сопутствующая информация с адресами.

Однако, в моей программе, у ExceptionLogger - выводятся только адреса.
Сгенерил программу с отладочной информацией, но всё равно - выводит только адреса. :| :oops: :cry:

:arrow: :?: Что нужно включить, чтобы показало название функции в месте сбоя, как в примере у ExceptionLogger?

.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Сбор данных для отладки на компьютере пользователя

Сообщение zub » 11.03.2017 19:04:38

vitaly_l
Удали упоминания о DesignTimePPI из lfm - заработает.

>>Сгенерил программу с отладочной информацией, но всё равно - выводит только адреса.
похоже на описаный мной баг. емнип 3.0 какраз с ним вышел. какой компилятор?
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

Re: Сбор данных для отладки на компьютере пользователя

Сообщение vitaly_l » 11.03.2017 19:51:10

zub писал(а):Удали упоминания о DesignTimePPI из lfm

да.
zub писал(а):какой компилятор?

версия 3.0 - и увы: crashreport - не пишет ничего кроме адресов. обидно, но менять FPC пока не хочу, т.к. всё работает без сбоев.
:roll: Потом попробую, когда релиз выйдет. Главное что теперь сам инструмент есть и знаешь где инструмент лежит :wink: .
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Сбор данных для отладки на компьютере пользователя

Сообщение zub » 12.03.2017 01:36:34

Ну дак 3.0.2 вроде как вышел. И lazarus 1.6.4 основанный на нем тоже вышел.
Вообще, на данном этапе развития fpc и lazarus свн версии предпочтительней, а про стабильность релизов и нестабильность транка - это всё сказки
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

Re: Сбор данных для отладки на компьютере пользователя

Сообщение zub » 13.03.2017 02:46:56

Проверил в 1.6.4 - работает, только нужно подправить версию fpc в ифдефе
Код: Выделить всё
  {$if FPC_FULlVERSION>=30002}
  AllowReuseOfLineInfoData:=false;
  //появилось нетак давно, отключает "оптимизации" при преобразовании
  //стека в строчку исходников, объявлено в модуле lineinfo
  //если AllowReuseOfLineInfoDat  присутствует - лучше выставить его в false
  {$endif}
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26


Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7

Рейтинг@Mail.ru