Что делать, когда приложение падает под Windows?

Вопросы программирования на Free Pascal, использования компилятора и утилит.

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

Что делать, когда приложение падает под Windows?

Сообщение CRobin » 29.11.2016 14:46:51

Здравствуйте. Когда запускаю приложение через консоль линукс, то в случае падения туда выводится отладочная информация, которая позволяет понять причину ошибки. При запуске из консоли Windows такого не происходит. Можно ли это исправить?
CRobin
постоялец
 
Сообщения: 145
Зарегистрирован: 26.01.2016 12:15:39

Re: Что делать, когда приложение падает под Windows?

Сообщение Лекс Айрин » 29.11.2016 14:53:23

CRobin, конечно. Скомпилировать приложение с отладочной консолью.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Что делать, когда приложение падает под Windows?

Сообщение CRobin » 29.11.2016 16:53:00

Лекс Айрин что я должен сделать для этого?
CRobin
постоялец
 
Сообщения: 145
Зарегистрирован: 26.01.2016 12:15:39

Re: Что делать, когда приложение падает под Windows?

Сообщение Лекс Айрин » 29.11.2016 17:34:02

Для начала, включить отладочную информацию в файле.
ну и...
Как увидеть отладочные сообщения?

В модуле LCLProc в LCL есть две процедуры для вывода отладочных сообщений. Они называются:

DebugLn: которая работает также, как WriteLn, но принимает только строки.
DbgOut: которая работает также, как Write, но принимает только строки.

В обычных условиях сообщения выводятся в stdout. Если stdout закрыт (например когда приложение {$AppType Gui} или откомпилировано с ключом -WG под Windows), сообщения не выводятся никуда.

Отладочные сообщение могут также выводится в файл. Код инициализации модуля LCLProc проверяет командую строку Lazarus.exe's на предмет наличия ключа '--debug-log=<file>'. Если этот ключ присутствует - весь последующий отладочный вывод направляется в <file>.

Если этого ключа нет, проверяется существование системной переменной окружения xxx_debuglog, где xxx - имя файла программы без расширения. Для Lazarus это будет lazarus_debuglog. Если такая переменная окружения существует, файл указанный в ней будет использован для вывода отладочных сообщений. Пример: если вы сделаете:

set lazarus_debuglog=c:lazarusdebug.txt

то отладочные сообщения будут выводится в c:lazarusdebug.txt.

Так как это реализовано в lclproc, любое приложение использующее lclproc может использовать этот механизм вывода отладочных сообщений.


Добавлено спустя 9 минут 11 секунд:
А, кстати,... как именно падает? Тихо или дает выхлоп (сообщение об ошибке)?
Если тихо, то у тебя, скорее всего, ошибка в инициализации (или отображении) формы.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Что делать, когда приложение падает под Windows?

Сообщение CRobin » 29.11.2016 17:48:13

Лекс Айрин спасибо, отключение ключа -WG помогло

Добавлено спустя 1 минуту 27 секунд:
Лекс Айрин писал(а):Если тихо, то у тебя, скорее всего, ошибка в инициализации (или отображении) формы.


Сто процентов. Теперь уже вижу что ошибка в Forms.pp. Ранее все работало, бизнес логика не менялась, на некоторых машинах продолжает работать. В чем может быть проблема?
CRobin
постоялец
 
Сообщения: 145
Зарегистрирован: 26.01.2016 12:15:39

Re: Что делать, когда приложение падает под Windows?

Сообщение Лекс Айрин » 29.11.2016 17:51:31

CRobin, да не за что. Я всего-лишь скопировал официальную FAQ.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Что делать, когда приложение падает под Windows?

Сообщение CRobin » 29.11.2016 17:57:36

Лекс Айрин в чем может быть проблема? У меня в приложении происходит создание объектов в секции initialization главного модуля с формой
CRobin
постоялец
 
Сообщения: 145
Зарегистрирован: 26.01.2016 12:15:39

Re: Что делать, когда приложение падает под Windows?

Сообщение Лекс Айрин » 29.11.2016 18:04:27

CRobin, не поверишь. Вариантов ошибок куча... или ты уже нашел ошибку?
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Что делать, когда приложение падает под Windows?

Сообщение CRobin » 29.11.2016 18:11:22

Лекс Айрин нет, меня убивает то что на разных машинах работает, отладочная информация очень скудная.
Код: Выделить всё
[FORMS.PP] ExceptionOccurred
  Sender=EAccessViolation
  Exception=Access violation
  Stack trace:
  $000000000045182F
TApplication.HandleException Access violation
  Stack trace:
  $000000000045182F
exception at 000000000045182F:
Access violation.

CRobin
постоялец
 
Сообщения: 145
Зарегистрирован: 26.01.2016 12:15:39

Re: Что делать, когда приложение падает под Windows?

Сообщение Лекс Айрин » 29.11.2016 18:27:28

Access violation это ошибка доступа к памяти... если честно, то самая неприятная ошибка.

Как я понимаю, это малый дамп состояния программы (хотя могу и ошибаться). Проще проверить происходит ли сам запуск программы... используя либо debugLn, либо ShowMessage.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Что делать, когда приложение падает под Windows?

Сообщение zub » 29.11.2016 19:13:59

CRobin
>> меня убивает то что на разных машинах работает
)) а пользователей скорее всего убивает то что ты забыл чтото проинициализировать и теперь работа программы зависит от "качества" "мусора" лежащего гдето.
>>отладочная информация очень скудная.
Отладочной информации нет совсем. Вспоминай как выключал ее, извиняйся перед ней и включай)). Также "вспоминай какие включал оптимизации и шли их лесом на время отладки.

>>Ранее все работало, бизнес логика не менялась, на некоторых машинах продолжает работать. В чем может быть проблема?
В твоем коде естественно, в чем же еще)) На тех машинах где работает погоняй сначала с heaptrc, потом под valgrind`ом
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Что делать, когда приложение падает под Windows?

Сообщение CRobin » 29.11.2016 19:22:25

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

Добавлено спустя 1 минуту 46 секунд:
Спасибо, zub Лекс Айрин, я на вас расчитывал и в который раз не ошибся)))
CRobin
постоялец
 
Сообщения: 145
Зарегистрирован: 26.01.2016 12:15:39

Re: Что делать, когда приложение падает под Windows?

Сообщение zub » 29.11.2016 19:33:32

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

Re: Что делать, когда приложение падает под Windows?

Сообщение Лекс Айрин » 29.11.2016 19:44:56

CRobin писал(а):если сравниваются две переменная без присвоеного значения.


ужас... я б себя за такое бил бы по рукам клавой(((

CRobin писал(а):я на вас расчитывал и в который раз не ошибся)))


Лесть тебя не спасет. Включи отладочные сообщения и внимательно их читай. Если честно, то периодически стоит просматривать весь выхлоп (в том числе предупреждения) компилятора и пытаться уменьшить количество сообщений при компиляции .
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Что делать, когда приложение падает под Windows?

Сообщение CRobin » 29.11.2016 20:06:49

Лекс Айрин это психологическая проблема на самом деле, как будто сам Танатос заставляет пренебрежительно относится к коду в местах, где меньше всего ждешь проблем.
CRobin
постоялец
 
Сообщения: 145
Зарегистрирован: 26.01.2016 12:15:39

След.

Вернуться в Free Pascal Compiler

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

Сейчас этот форум просматривают: Google [Bot] и гости: 19

Рейтинг@Mail.ru