C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Indy и exception class EOutOfMemory  (Прочитано 2472 раз)
Jenia
Участник


Сказали спасибо: +0/-0
Offline

Сообщений: 10


Indy и exception class EOutOfMemory
« : 17 Апрель 2015, 15:30:03 »

Здравствуйте.

Сделал простой веб-сервер.
Все что нужно работает.
Но с включенным CodeGuard, черз несколько десятков иногда пару сотен запросов, выдает ексепшн :
Project ... raised exception class EOutOfMemory with message 'Out of memory'. Proccess stopped. Use Step or Run to continue.
если отключить CodeGuard то ни чего не выскакивает, и вроде все работает нормально.

В чем может быть причина такого ексепшн?

Обработчик CommandGet:
Код
AnsiString S;
AnsiString PathExe=ExtractFilePath(Application->ExeName);
AnsiString PathHtml=PathExe+"html"+"\\";
AnsiString ReqestDoc;
AnsiString ttt;
 
if (RequestInfo->Document=="/") ReqestDoc=PathHtml+"index.html";
   else ReqestDoc=PathHtml+ClearFirstSlash(RequestInfo->Document);
 
 
if (FileExists(ReqestDoc)) {
       ttt=ExtractFileExt(ReqestDoc);
       if (ttt==".css") {
           ResponseInfo->ContentType="text/css";
           }
       if (ttt==".js") {
           ResponseInfo->ContentType="text/javascript";
           }
       if (ttt==".html") {
           ResponseInfo->ContentType="text/html";
           }
       if (ttt==".ico") {
           ResponseInfo->ContentType="image/x-icon";
           }
       if (ttt==".gif") {
           ResponseInfo->ContentType="image/gif";
           }
       if (ttt==".jpg") {
           ResponseInfo->ContentType="image/jpeg";
           }
       if (ttt==".png") {
           ResponseInfo->ContentType="image/png";
           }
       if(ResponseInfo->ContentType!="")
           ResponseInfo->ContentStream = new TFileStream(ReqestDoc ,fmOpenRead);
       }

Тестовая html страничка:
Код
>
>
http-equiv="Content-Type" content="text/html; charset=Windows-1251" />
name="viewport" content="width=device-width, initial-scale=1.0">
>
XPlane-Interviewing>

REL="stylesheet" TYPE="text/css" href="styles.css">
="text/javascript" src="jquery-1.11.2.min.js">>

="text/javascript" src="jquery.json-2.4.min.js">>
="JavaScript">
function ref()
{
window.location = "http://127.0.0.1:88/";
}
$(document).ready(function(){
setTimeout(ref,2000);
});
>
>
class="Body1">
TEST
>

>
 

P.S.
Builder 6.
Ставил Indy 10 таже история.
Пробовал ICS: через несколько запросов блокирует сервер и не принимает запросы(возможно необходимо что то настроить, но я не углублялся тестировал простой вариант).
Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


Re: Indy и exception class EOutOfMemory
« Ответ #1 : 20 Апрель 2015, 12:32:21 »

Здесь у тебя утечка памяти:

Код
ResponseInfo->ContentStream = new TFileStream(ReqestDoc ,fmOpenRead);
 

Память под TFileStream выделяется, а где она освобождается?
Записан
Jenia
Участник


Сказали спасибо: +0/-0
Offline

Сообщений: 10


Re: Indy и exception class EOutOfMemory
« Ответ #2 : 22 Апрель 2015, 09:10:40 »

Освобождает ее сам indy,
так как отправка данных браузеру происходит после завершения метода commandget, значит и нельзя удалять.
а если даже я освобожу память(экспериментировал) то пишет Access ..., сам Guard про утечку не говорит
Записан
Jenia
Участник


Сказали спасибо: +0/-0
Offline

Сообщений: 10


Re: Indy и exception class EOutOfMemory
« Ответ #3 : 22 Апрель 2015, 09:38:05 »

Нашел еще один вариант:

заменил
Код
ResponseInfo->ContentStream = new TFileStream(ReqestDoc ,fmOpenRead);
на
Код
IdHTTPServer1->ServeFile(AThread, ResponseInfo, ReqestDoc);

работает также, через некоторое n запросов вылетает: Project ... raised exception class EOutOfMemory with message 'Out of memory'. Proccess stopped. Use Step or Run to continue. 
Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


Re: Indy и exception class EOutOfMemory
« Ответ #4 : 22 Апрель 2015, 18:59:01 »

Если закомментировать это
Код
ResponseInfo->ContentStream = new TFileStream(ReqestDoc ,fmOpenRead);
 

то ошибка EOutOfMemory все равно выбрасывается? Поэкспериментируй с точками останова, посмотри, где именно (на какой строке в исходнике) выбрасывается это исключение. По идее, где-то утечка памяти. Что-то выделяется и не освобождается.
Записан
Jenia
Участник


Сказали спасибо: +0/-0
Offline

Сообщений: 10


Re: Indy и exception class EOutOfMemory
« Ответ #5 : 22 Апрель 2015, 19:23:51 »

подскажи плиз, как трейсить исходники инди на паскале?

глазом я просмотрел исходники, и на первый взгляд вроде объект stream удаляется.

прчем эта команда :
Код
IdHTTPServer1->ServeFile(AThread, ResponseInfo, ReqestDoc);
реализуется так же как и
Код
ResponseInfo->ContentStream = new TFileStream(ReqestDoc ,fmOpenRead);
но на паскале.

согласен по поводу утечки, но как найти непонемаю,
причем если не выводить логи о работе веб сервера в memo то ошибка вылетает быстрее.
может ли это быть связано что 6 builder запущен на windows7 (в принцыпе проблем ранее не замечал)?
Записан
Jenia
Участник


Сказали спасибо: +0/-0
Offline

Сообщений: 10


Re: Indy и exception class EOutOfMemory
« Ответ #6 : 27 Апрель 2015, 12:16:09 »

проблему я так и не решил 
Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


Re: Indy и exception class EOutOfMemory
« Ответ #7 : 29 Апрель 2015, 08:23:02 »

Привет. Методы трассировки стандартные. Ставишь точки останова на "интересных" строках кода (F5), запускаешь программу в режиме отладки (F9). При остановке на точках смотришь CodeGuard, трассируешь внутрь стека (F7) или до следующей точки (F8). И т.д. до обнаружения бага или до конца выполнения программы. Если ничего не обнаружено, ставишь другие точки останова и трассируешь в той же последовательности и т.д. Нужно запастись терпением и вниманием 
Записан
Jenia
Участник


Сказали спасибо: +0/-0
Offline

Сообщений: 10


« Ответ #8 : 29 Апрель 2015, 09:58:08 »

в своем коде я знаю, но как трасировать в самом indy, ведь исключение происходит не в моем коде
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.177 секунд. Запросов: 22.