![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Можно ли узнать где произошла ошибка на чужом компе? [D7, XP]
igorium@list.ru © (2011-12-22 16:13:00)Всем привет.
Есть проект, который у меня отлично работает.
А у другого человека нет.
Придти к нему с Delphi я не могу технически.
Можно ли вставить в проект некий код, который вместо обычной ошибки, выдавал бы номер строки и в какой области и что произошло.
Dimka Maslov (2011-12-23 09:48:00) [1]
> igorium © (22.12.11 21:44) [16]
Именно потому, что проблема с другим компом. Пусть пользователь чужого компа бибикания считает, а потом скажет.
Ega23 (2011-12-22 22:16:00) [2]
> У меня проблема с чужим компом - со своим я отладкой ищу.
Если одна и та же программа, то у тебя просто ситуации такой не возникало.
igorium (2011-12-22 21:44:00) [3]
> Dimka Maslov © (22.12.11 20:59) [15]
> Ещё можно в различные критические места понатыкать Beep
> и по количеству бибиканий локализовать место ошибки. Сам
> так делал.
Идея смешная :)
У меня проблема с чужим компом - со своим я отладкой ищу.
Dimka Maslov (2011-12-22 20:59:00) [4]Ещё можно в различные критические места понатыкать Beep и по количеству бибиканий локализовать место ошибки. Сам так делал.
igorium@list.ru (2011-12-22 19:00:00) [5]Я уже понял.
Правда только после копания Гугла :)
Но идея понравилась, спасибо.
Ega23 (2011-12-22 18:35:00) [6]
> Спасибо, я в курсе переводов.
Я тебе не перевод, а потенциальное место, где косяк.
А где оно - только тебе известно, я же не видел кода твоей программы.
WriteToLog - это условная штука была, реальной такой, естественно, нет.
igorium@list.ru (2011-12-22 18:18:00) [7]Ega23, stas
Спасибо, я в курсе переводов.
Для того, чтобы найти починить программу надо найти где сломано...
Вопрос только в этом.
Починить я смогу.
Насчет Out of memory - я кажется нашел причину. Искренне надеюсь на это :)
Из всего вышесказанного мне понравилось WriteToLog.
Буду копать в этом направлении. Пошел читать мануал.
stas (2011-12-22 17:53:00) [8]igorium@list.ru (22.12.11 17:26) [9]
Out of memory - программа растет (большими темпами) в памяти по ходу работы?
если да, то где-то утечка памяти.
Ega23 (2011-12-22 17:50:00) [9]
> И у всех ошибки разные - "Range check error", "Access violation",
> "Out of memory".
Range check error - не по тому индексу массива обращаешься, такого ещё нет
Access violation - обращаешься к ещё не созданному или уже убитому объекту.
Out of memory - не уничтожаешь объект(ы) в процессе работы.
Это с вероятностью 99%, хотя возможны и другие варианты.
igorium@list.ru (2011-12-22 17:26:00) [10]Спасибо за массовое желание помочь.
Программа работает с большим количеством графических файлов JPEG, читаю у них информацию.
У меня все нормально обработало ~23'000 файлов.
У кого то выдает ошибку на ~50'000 файлов, у кого-то на ~1800 файлов.
И у всех ошибки разные - "Range check error", "Access violation", "Out of memory".
Скорее всего ошибки детские - где-то что-то не учел.
У меня много динамических массивов, переменных.
Но где, что произошло я не в состоянии узнать без ~логов.
stas (2011-12-22 16:32:00) [11]Anatoly Podgoretsky © (22.12.11 16:31) [6]
Это не мне)
stas (2011-12-22 16:31:00) [12]igorium@list.ru (22.12.11 16:13)
А что за программа? и что пишет там где не работает?
Anatoly Podgoretsky (2011-12-22 16:31:00) [13]> stas (22.12.2011 16:15:01) [1]
ASSERT знает все, но с ним сложно. А если человек в состоянии прочитать и
сообщить информацию с экрана, то можно не усложнять.
OW (2011-12-22 16:29:00) [14]
> http://www.eurekalog.com/index_delphi.php
вещь!
можно Jcl помотреть
JclDebug,
JclHookExcept,
примерно тоже самое, что и в Эврике, но пилить руками больше, как мне показалось
Ega23 (2011-12-22 16:23:00) [15]Имей привычку потенциально-опасные места заключать в try..except с рерайзом E.Message = E.Message + ' procedure TMyObject.Foo' (например).
Не гаси исключения, а пиши их в лог.
Не создавай коннект к базе в дизайн-тайм.
Следи за соответствием версий всяких OLEDB-провайдеров, MSOffice и прочих примочек, которые ты будешь дёргать из своей программы.
Не ленись создавать Debug и Release сборки. В дебаге логгируй действия
{$IFDEF DEBUG}
WriteToLog ...
{$ENDIF}
Ну и т.д.
Германн (2011-12-22 16:20:00) [16]http://www.eurekalog.com/index_delphi.php
MBo (2011-12-22 16:17:00) [17]Assert знает о строках.
stas (2011-12-22 16:15:00) [18]писать лог как вариант.
Номер строки не вернет однозначно, откуда exe файлу знать о строках в твоей апрограмме. Вернет адрес, вроде по адресу можно как-то разобрать.