Сбор данных для отладки на компьютере пользователя
Модератор: Модераторы
Сбор данных для отладки на компьютере пользователя
Уверен что баян и где то обсуждалось.
Ситуация следующая, на Win10 и Win7 программа работает, на Win8 при попытке вызвать окошки которые у меня плагинами реализованы эти окна не открываются, а вылетает ошибка "Деление на ноль".
Как отловить место, если нет среды разработки на проблемной машине?
Ситуация следующая, на Win10 и Win7 программа работает, на Win8 при попытке вызвать окошки которые у меня плагинами реализованы эти окна не открываются, а вылетает ошибка "Деление на ноль".
Как отловить место, если нет среды разработки на проблемной машине?
Подробный лог или удаленная отладка.
Хотя наврятли поможет:
>>у меня плагинами реализованы эти окна не открываются
Хотя наврятли поможет:
>>у меня плагинами реализованы эти окна не открываются
https://github.com/beNative/lazarus/tree/master/components/ExceptionLogger возможно чем то поможет.
Добавлено спустя 1 минуту:
есть ещё luipack. Вроде как мультилогер.
Добавлено спустя 1 минуту:
есть ещё luipack. Вроде как мультилогер.
>>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
______________________________________________________________________________________
С стеком и последним логом. Помогает не сильно, но разок выручило, когда пользователь не мог дать рецепт воспроизведения крэша
-
Mirage
- энтузиаст
- Сообщения: 881
- Зарегистрирован: 06.05.2005 20:29:07
- Откуда: Russia
- Контактная информация:
Надо предусмотреть сохранение стека вызовов (хотя бы в виде просто списка адресов, без инфы об исходниках) при появлении необработанного исключения и либо давать его пользователю, чтобы он отправил разработчику, либо прямо отправлять куда-нибудь.
Такой стек FPC генерит, надо лишь его заполучить.
По стеку вызовов уже можно определить место.
А это разве работает без отладочной информации в екзешнике?
Такой стек FPC генерит, надо лишь его заполучить.
По стеку вызовов уже можно определить место.
zub писал(а):я при креше создаю файлик вида
А это разве работает без отладочной информации в екзешнике?
>>А это разве работает без отладочной информации в екзешнике?
Конечно нет. отладочная инфа должна присутствовать, ,без отладочной инфы будет просто список адресов, без расшифровки
Конечно нет. отладочная инфа должна присутствовать, ,без отладочной инфы будет просто список адресов, без расшифровки
Последний раз редактировалось zub 10.03.2017 01:18:24, всего редактировалось 1 раз.
zub писал(а):Это можно и штатными средствами сделать. я при креше создаю файлик вида
Описание этой функции где искать? Точнее как называется в доках?
BackTraceStrFunc
приложил примерный проект. Вот только совсем недавно (какраз в районе 3.0) были проблемы: все хорошо работало, но закомитили "оптимизацию" преобразования адреса в строку, эта оптимизация сделала возможным получение стека только один раз и после штатного fpc обработчика уже ловить стало нечего. потом появилась возможность отключить эту оптимизацию AllowReuseOfLineInfoData:=false. Это баг описан тут http://bugs.freepascal.org/view.php?id=28288
Если ловить вылет надо в секциях инициализации модулей то способ назначения обработчика из примера не подойдет - слишком поздно срабатывает, когда всё уже проинициализировано. тут придется пользоваться fpc а не lcl механизмами назначения обработчика.
Запускать пример нужно без лазаря, в лазаре свой обработчик исключений. Также хз как это всё отработает с дллками. Естественно и главная программа и "плагины" должны быть собраны с отладочной инфой
приложил примерный проект. Вот только совсем недавно (какраз в районе 3.0) были проблемы: все хорошо работало, но закомитили "оптимизацию" преобразования адреса в строку, эта оптимизация сделала возможным получение стека только один раз и после штатного fpc обработчика уже ловить стало нечего. потом появилась возможность отключить эту оптимизацию AllowReuseOfLineInfoData:=false. Это баг описан тут http://bugs.freepascal.org/view.php?id=28288
Если ловить вылет надо в секциях инициализации модулей то способ назначения обработчика из примера не подойдет - слишком поздно срабатывает, когда всё уже проинициализировано. тут придется пользоваться fpc а не lcl механизмами назначения обработчика.
Запускать пример нужно без лазаря, в лазаре свой обработчик исключений. Также хз как это всё отработает с дллками. Естественно и главная программа и "плагины" должны быть собраны с отладочной инфой
- Вложения
-
- CrashedForm.7z
- (59.49 КБ) 562 скачивания
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 - выводятся только адреса.
Сгенерил программу с отладочной информацией, но всё равно - выводит только адреса.
.
vitaly_l
Удали упоминания о DesignTimePPI из lfm - заработает.
>>Сгенерил программу с отладочной информацией, но всё равно - выводит только адреса.
похоже на описаный мной баг. емнип 3.0 какраз с ним вышел. какой компилятор?
Удали упоминания о DesignTimePPI из lfm - заработает.
>>Сгенерил программу с отладочной информацией, но всё равно - выводит только адреса.
похоже на описаный мной баг. емнип 3.0 какраз с ним вышел. какой компилятор?
zub писал(а):Удали упоминания о DesignTimePPI из lfm
да.
zub писал(а):какой компилятор?
версия 3.0 - и увы: crashreport - не пишет ничего кроме адресов. обидно, но менять FPC пока не хочу, т.к. всё работает без сбоев.
Ну дак 3.0.2 вроде как вышел. И lazarus 1.6.4 основанный на нем тоже вышел.
Вообще, на данном этапе развития fpc и lazarus свн версии предпочтительней, а про стабильность релизов и нестабильность транка - это всё сказки
Вообще, на данном этапе развития fpc и lazarus свн версии предпочтительней, а про стабильность релизов и нестабильность транка - это всё сказки
Проверил в 1.6.4 - работает, только нужно подправить версию fpc в ифдефе
Код: Выделить всё
{$if FPC_FULlVERSION>=30002}
AllowReuseOfLineInfoData:=false;
//появилось нетак давно, отключает "оптимизации" при преобразовании
//стека в строчку исходников, объявлено в модуле lineinfo
//если AllowReuseOfLineInfoDat присутствует - лучше выставить его в false
{$endif}