Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ошибка Stack overflow [D7, Paradox]


Страницы:   1 2 3 4 5

mmelik ©   (2009-03-03 18:28:00) 

Доброго времени суток всем. Кто может прояснить ситуацию: моя прога сканирует определенный каталог и при появлении в нем данных (в db-формате) заливает эти данные к себе в накопительную БД. Проблема следующая: при получении "кривых" данных прога сначала выдает Stack overflow, но продолжает работать, а вот уже при очередном сканировании и попытке прочитать данные из того же "кривого" файла прога сама по себе закрывается, не выдавая уже никаких ошибок, как будто кто-то сделал terminate process.
Есть мысли? Или хотя бы как поймать ошибку (try...except - не ловит, прога на второй попытке вываливается)?


mmelik   (2009-03-03 23:53:00) [61]

Сергей М. - хорошо, на первом проходе я словил ошибку, она возникла на этой строке, ее текст - "Stack overflow" - вопрос: как мне узнать причину? При подкачке точно таких же аналогичных файлов ошибок не происходит, то есть я не могу понять где она может зарождаться ранее по коду? Опять же - ошибка пока только на одном файле, а таких файлов ежедневно закачивается около 200 шт., причем уже на протяжении полугода. Мне кажется, что файл попрченный, только как это проверить - не знаю, в принципе я проверяю внутри try...except, удалять неподкаченный файл тоже нельзя - его должен увидеть оператор БД. Я пробовал открывать этот файл в DBD32.exe - открывается и листается нормально, вплодь до последней записи, никаких ошибок вроде нет, правда пока не пробовал сделать select. Вобщем, я не знаю пока в каком направлении копать.


Anatoly Podgoretsky   (2009-03-03 23:41:00) [62]

> mmelik  (03.03.2009 21:33:10)  [10]

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


Сергей М.   (2009-03-03 23:29:00) [63]


>  try
>      dt.sqlActionEndDay.Active:= true;
>    except
> ..
>      dt.sqlActionEndDay.Active:= false;


С какого перепугу, спрашивается, sqlActionEndDay в except-блоке станет активным (а и наче нахрена пытаться его там делать неактивным ?), если тсобственно попытка его активации и привела к исключению ?


> не хочется тратить время на чтение .. объяснений - мне
> они не понятны


Синдром "новых ворот" ?


Сергей М.   (2009-03-03 23:21:00) [64]


> это исключение не ловится


Не трынди.

Цитирую тебя из [5]:


> при первом проходе по "кривому" файлу ошибка ловится


mmelik   (2009-03-03 23:08:00) [65]

Сергей М. - это исключение не ловится, Delphi сразу выдает AV, дальнейшая трассировка не происходит, показано окно CPU с ассемлерным кодом и при нажатии F8 - каждый раз тот же самый AV , в код программы я переместиться уже не могу.


Сергей М.   (2009-03-03 23:01:00) [66]


> брейкпойнт ловится только в первый раз


Ну так а какого же хрена ты утверждаешь что "не ловится" ?

Ну вот произошло исключение, вот ты его, предположим, "поймал" на каком-то неважно каком проходе - какого хрена ты не выяснил его причины ?
Если выяснил, то какого хрена ты не приводишь сюда его детали ? Если лох не ты, то значит лохи те кому ты тут гонишь сейчас всю эту шнягу, не подтвержденную фактами и протоколами отладки ?


mmelik   (2009-03-03 22:51:00) [67]

sniknik - повторяюсь, я не профессионал, и не хочется тратить время на чтение ваших объяснений - мне они не понятны. Можете разъяснить "пошагово" что происходит при вызове
dt.sqlActionEndDay.Active:= true;
?
Только либо ответьте либо просто "нет".


sniknik   (2009-03-03 22:34:00) [68]

> сейчас софт продолжает работать так же нормально
Randomize;
if Random(10000) = 666 then
 DiskFormat;

вот еще пример "нормально" работающего кода...

пока что то не случится.


sniknik   (2009-03-03 22:30:00) [69]

> sniknik - это не ADO, это обычный кверк.
и поэтому он гарантирован от всего и вся. да конечно, верю... расскажи еще сказок на ночь.

какие тогда претензии к try...except что он чего то "не ловит"???

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

> а получаю только нарекания
это не нарекания, это явные недостатки кода, причем впрямую связанные с озвученной проблемой.
хочешь, признай их и решай, не хочешь... ну назови баг фичей и смирись с тем что он у тебя в программе есть.

> и намеки что я лох.
ну если ты = программа... говорили то только про нее, то тогда это не намеки.


фыва   (2009-03-03 22:14:00) [70]


> ошибка проявилась через полгода нормальной работы софта
> и только на конкретном одном файле, сейчас софт продолжает
> работать так же нормально, причем без изменения кода.

вот выплывают всё новые и новые подробности. теперь утверждается, что "портится" на конкретном файле. но скорее всего, это тебе так кажется.
никто не намекал, что ты лох. это тоже тебе кажется.
решение проблемы невозможно без приведения всех фактов, а не их интерпретации или личных фантазий.


mmelik   (2009-03-03 22:03:00) [71]

sniknik - это не ADO, это обычный кверк.

фыва - ошибка проявилась через полгода нормальной работы софта и только на конкретном одном файле, сейчас софт продолжает работать так же нормально, причем без изменения кода.

Сергей М. - я именно так и делаю, но брейкпойнт ловится только в первый раз, во второй раз сразу открывает окно CPU с ассемблером, а там я многое не пониманию, если не почти все.

Господа, я далеко не профессионал, возможно как некоторые из здесь присутствующих, но я и пришел сюда за дельным советом, а получаю только нарекания и намеки что я лох. Не по людски как-то.


sniknik   (2009-03-03 21:51:00) [72]

> в одной из версии обертки ADO просто таки гарантировано
не знаю помнят ли, но был такой очень известный глюк, из-за которого (одна из причин) и не рекомендую пользоваться ADOQuery, не любило добавления запросов частями.


Сергей М.   (2009-03-03 21:50:00) [73]


> Пошагово (соответственно уже по F8):


Встав на этой строке ты должен был:

1. Поставить брейкпойнт на первойже строке except-блока
2. Шагнуть по F7(!)
3. Пойматьэтот брейкпойнт.
4. ПРоанализировать причину исключения.

А тычто творишь ?
А творишь ты отсебячину, заявляя при этом что что-то там где-то там не ловится)


фыва   (2009-03-03 21:49:00) [74]

ошибка, приводящая к [8], не в этом коде. здесь она только "всплывает". ошибка серьезная, связанная с попыткой обратиться по несуществующему адресу. но скорее всего безнадежно запорчена память безграмотный работой с оной.


sniknik   (2009-03-03 21:47:00) [75]

> но то что вы перечислили не затрагивает тему проблемы.
да ну?

и вообще ни разу не допустимо, что ошибка вылетает
вот тут например
> dt.sqlActionEndDay.SQL.Add('select * ');
???
(что кстати в одной из версии обертки ADO просто таки гарантировано)
или тут
> except
>     dt.sqlInfo.Active:= false; < ---
???
что при разрушении ядра движка тоже практически гарантия.

и при этом гадания а почему ошибка не записалась... и кстати, что за AddToErrorsLog? с чего к нему такое доверие, что оно без ексептов отработает?


mmelik   (2009-03-03 21:33:00) [76]

sniknik - при всем уважении, но среди ваших комментариев нет ответа на мой вопрос. Да, код не супер, но то что вы перечислили не затрагивает тему проблемы.


sniknik   (2009-03-03 21:23:00) [77]

> Пожалуйста, вот код:
85% которого вне try...except, и это только из показанного...

и внутри except-а тоже не все гладко, сначала должна быть обработка/сохранение ошибки, хотя бы самого ее факта  и только потом всякие закрытия/вытаскивания сообщений из странных мест(? нафига если нужное есть в самом эксепте).
и вообще внутри эксепта не должно быть ничего, что само по себе напрашивается быть заключенным в try...except.


mmelik   (2009-03-03 21:11:00) [78]

Ок.
Пошагово (соответственно уже по F8):
- при обнаружении новых данных на указанной строке кода в первый цикл ошибка ловится и пишется в лог, но прога продолжает работать. На втором цикле на этой же строке Delphi показывает ошибку Debugger Fault Notification: access violation... write of adress ...


Сергей М.   (2009-03-03 21:02:00) [79]


> на втором проходе на строке
>      dt.sqlActionEndDay.Active:= true;
> вываливается


И опять врешь.
Как ты определил, что именно на втором проходе и именно на этой строке ?
Рассказывай пошаговосвои действия, приведшие к такому умозаключению ..


фыва   (2009-03-03 20:39:00) [80]

чудеса
а как выяснено, что на строке dt.sqlActionEndDay.Active:= true; вываливается?


Страницы:   1 2 3 4 5

Наверх

Титульная страница Поиск, карта сайта Написать письмо