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

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

Процедуры вылетают без ошибок


Страницы:   1 2

Krolm ©   (2008-11-05 06:52:00) 

В достаточно крупном приложении произвольно вылетают процедуры. То есть доходит до какой-то строчки, потом в подпрограмме при построковой отладке брейк прыгает на строчку end; и выходит из всех подпрограмм на самый высокий уровень. Никаках сообщений об ошибках. Если есть try finally блоки - finally обрабатывается нормально.
Типичные процедуры, после которых вылетает:
s:=StringReplace(s,#13#10,#9,[rfReplaceAll]);
sl.add(s); (sl:TstringList);

При этом если такие "проблемные" процедуры заменить на другие попроще, например MessageBox(0,@s[1],'',0); Все отрабатывается без проблем.

Сначала помогло увеличение размера стека + директива компилятора inline. Поток стал отрабатывать без проблем. Но такая же ерунда возникла в основной программе, в процедуре сохранения StringGrid в файл. Не могу найти причину. Что может быть?
ОС Vista, CodeGear™ RAD Studio 2007  Version 11.0.2902.10471


Krolm   (2008-11-06 08:31:00) [21]

По вопросам: 2 потока. 1 - интерфейс. 2 - работа с сетью.
try
s:=StringReplace(s,#13#10,#9,[rfReplaceAll]);
except
on e:exception do
  Messagebox(0, PChar(e.classname + ' ' + e.Message), '', mb_ok or mb_setforeground); // <- что дословно написано в тексте сообщения ?
end;

Никаких исключительных ситуаций не возникает. Но я все таки нашел причину.

При создании формы на событии OnShow висело выравнивание ширины колонок. И был там код наподобие следующиего:

for i:= main.Colcount to main.ColCount+5 do
 main.Colwidths[i]:=-1;

main.Colcount была представлена в виде константы, и при изменении структуры таблицы (столбцов стало меньше) я не отловил что происходит бред и вообще обращение к тем объектам, которых не существует.

У меня остается вопрос, почему софт не сыпался на этом этапе. А сыпался потом, когда уже работал даже не со StringGrid ом.


Германн   (2008-11-06 02:25:00) [22]

Ох уж эти доппотоки! :(
Чур меня!


Loginov Dmitry   (2008-11-05 23:03:00) [23]

> То есть доходит до какой-то строчки, потом в подпрограмме
> при построковой отладке брейк прыгает на строчку end; и
> выходит из всех подпрограмм на самый высокий уровень. Никаках
> сообщений об ошибках. Если есть try finally блоки - finally
> обрабатывается нормально.


Это все в доп. потоке? Тогда какие сообщения об ошибках ожидаются? Поток грохается просто, вот и все. Тут необходимо перехватывать исключение, как в [1].


Leonid Troyanovsky   (2008-11-05 16:05:00) [24]


> Krolm ©   (05.11.08 06:52)  

> В достаточно крупном приложении произвольно вылетают процедуры.

IsMultiThread = True?

--
Regards, LVT.


Anatoly Podgoretsky   (2008-11-05 16:01:00) [25]

> KSergey  (05.11.2008 13:29:05)  [5]

В которой наверно и происходит ошибка и поток слетает, вместе с приложением. Особенно если гдето есть except end;


KSergey   (2008-11-05 13:29:00) [26]

> Anatoly Podgoretsky ©   (05.11.08 13:04) [3]
> > Поток стал отрабатывать без проблем.

Я это читал, от того и последнйи вопрос.
Но может чел. имел ввиду что-то другое? Но если тама еще и многопоточность....


Anatoly Podgoretsky   (2008-11-05 13:05:00) [27]

> Поток стал отрабатывать без проблем.


Anatoly Podgoretsky   (2008-11-05 13:04:00) [28]

> Поток стал отрабатывать без проблем.


KSergey   (2008-11-05 12:25:00) [29]

Это наблюдается только в отладчике?
StringList точно создан до использования?
Приложение однопоточное или многопоточное?


Сергей М.   (2008-11-05 10:58:00) [30]

try
 s:=StringReplace(s,#13#10,#9,[rfReplaceAll]);
except
 on e:exception do
   Messagebox(0, PChar(e.classname + ' ' + e.Message), '', mb_ok or mb_setforeground); // <- что дословно написано в тексте сообщения ?
end;


Страницы:   1 2

Наверх

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