try except end - как узнать номер строки с ошибкой?

Вопросы программирования и использования среды Lazarus.

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

try except end - как узнать номер строки с ошибкой?

Сообщение Angel_19 » 10.09.2014 00:07:03

Доброго!
Платформа Windows, приложение - служба.

Для отлова ошибок использую блоки try except end - как узнать номер строки с ошибкой?
Возможно ли это?

(Пока сделал так, вставил в текст программы переменную которой присваиваю GUID и потом вывожу эту переменную в лог, и могу понять где возникла ошибка. Нет ли способа проще? Т.к. этот доп код сильно ухудшает читаемость исходного кода.)
Angel_19
новенький
 
Сообщения: 37
Зарегистрирован: 24.06.2014 17:29:47

Re: try except end - как узнать номер строки с ошибкой?

Сообщение Ism » 10.09.2014 00:29:58

Может это в свойствах проекта ?
Изображение
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: try except end - как узнать номер строки с ошибкой?

Сообщение Angel_19 » 10.09.2014 08:35:46

Это все стоит, и во время отладки в IDE работает.
Я говорю про то как узнать номер строки где возникла ошибка когда приложение работает без IDE (у клиента) и этот номер строки вывести в лог.
Angel_19
новенький
 
Сообщения: 37
Зарегистрирован: 24.06.2014 17:29:47

Re: try except end - как узнать номер строки с ошибкой?

Сообщение Sergei I. Gorelkin » 10.09.2014 09:02:35

Проще всего из обработчика исключения вызвать
Код: Выделить всё
DumpExceptionBacktrace(LogFile);

запишет в файл стек вызовов, приведший к исключению.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1407
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: try except end - как узнать номер строки с ошибкой?

Сообщение Angel_19 » 10.09.2014 10:07:02

Пишет в лог примерно такое:
$0A21FDA4
$0046300F
$0045C0A3
$00547B44
$00538FD4
$0053857E
$00436058

Как с этим работать дальше?
И после вызова начинает грузить процессор под 100%.
Angel_19
новенький
 
Сообщения: 37
Зарегистрирован: 24.06.2014 17:29:47

Re: try except end - как узнать номер строки с ошибкой?

Сообщение Sergei I. Gorelkin » 10.09.2014 10:48:30

Если собрано с ключом -gl, то должны выводиться номера строк и имена функций. Хотя смотря что за исключение. Для самостоятельно брошенных исключений обычно работает. Для всяких EAccessViolation - как повезет. В данном случае первый адрес явно не из программы, попытка получить для него информацию может поставить код из модуля lineinfo в такую позу, из которой он уже не выйдет.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1407
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: try except end - как узнать номер строки с ошибкой?

Сообщение Angel_19 » 10.09.2014 11:33:32

Да, с некоторыми исключениями только адреса, а с некоторыми полная выкладка - модуль, строка и др.

Почему вот только после вызова DumpExceptionBacktrace(LogFile); программа начинает загружать процессор на 100%?

Добавлено спустя 27 минут 5 секунд:
Насчет загрузки проца на 100% это у меня косяк.
Angel_19
новенький
 
Сообщения: 37
Зарегистрирован: 24.06.2014 17:29:47


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru