Форум: "Начинающим";
Текущий архив: 2007.10.07;
Скачать: [xml.tar.bz2];
ВнизОтлов динамической ошибки по адресу 0х... Найти похожие ветки
← →
__DATA__ (2007-08-24 17:56) [0]У пользователя время от времени программа вылетает с ошибкой
Заголовок: Find text: xServer.exe - Application Error
Текст ошибки: The exception unknown software exception (0x0eedfade) accurred in then application at location 0x7c812a5b
Кнопки: Ok и Cancel
Как мне найти строчку кода в .pas файле где происходит данная ошибка ума приложить не могу :(
Буду рад любым советам и наставлениям
Заранее благодарен!
← →
__DATA__ (2007-08-24 17:58) [1]Забыл добавить. Если нажать кнопку Cancel приложение немедлено закроется, если жать Ок то ошибка будет появляться снова и снова, потом ее текст изменится на другой, потом снова на другой и т.д в конце концов приложение закроется
← →
Rouse_ © (2007-08-24 21:27) [2]0eedfade - говорит о том что памяти нема... Что говорит либо о хорошем мемлике, либо о том что ее действительно нема...
← →
TStas © (2007-08-25 04:42) [3]А ещё так бывает, когда объект уже уничтожин, при жизни у него был адрес 0x7c812a5b и с ним что-то сделать хотят.
← →
vpbar © (2007-08-25 16:46) [4]Попробуйте обработчик ошибок из madCollection http://madshi.net/ . Очень удобно. Правда там только для некомерческого применения.
Можно еще собрать обработчик с помощью JclDebug www.delphi-jedi.org .
Можно воспользоваться пунктом Search-Find Error в делфи, чтобы найти место ошибки по адресу.
← →
__DATA__ (2007-08-27 07:46) [5]
> vpbar © (25.08.07 16:46) [4]
Я уже использую неплохой компонент отлова и показа места ошибок в исходном коде Castalia, однако данную ошибку компонент не перехватывает.
Через Search-Find error если ввести адрес 0eedfade перекинет на пустое место.
> Rouse_ © (24.08.07 21:27) [2]
Так ведь должна выскакивать ошибка Out of memory?
> TStas © (25.08.07 04:42) [3]
Думаю что данная ситуация в моем коде практически исключена ...
← →
Сергей М. © (2007-08-27 09:02) [6]
> __DATA__ (24.08.07 17:56)
Что показывает пошаговая трассировка ?
← →
Anatoly Podgoretsky © (2007-08-27 09:18) [7]адрес 0x7c812a5b говорит, что он не в его ехе, а в системе, в библиотеках, поэтому отладка и поиск намного сложнее, надо проверять все адреса, которые передаются в АПИ функции.
← →
Rouse_ © (2007-08-27 11:56) [8]
> Так ведь должна выскакивать ошибка Out of memory?
Где? В системе?
← →
__DATA__ (2007-08-27 17:02) [9]
> Rouse_ © (27.08.07 11:56) [8]
Увеличил размер файла подкачки, всеравно ошибка выскакивает примерно с той же частотой раз в 1-2 часа, видимо это не связано с утечкой памяти, хоть и небольшая утечка памяти в программе есть ...
> Anatoly Podgoretsky © (27.08.07 09:18) [7]
Не подскажете ли вы, какими инструментами можно воспользоваться для решения данной задачи, а также был бы очень рад статье, где данный процесс описывается, т.к с поиском ошибок по их адресу я ранее не сталкивался
← →
Anatoly Podgoretsky © (2007-08-27 18:34) [10]Отладчик, голова, настойчивость.
А лучше не допускать таких ситуаций изначально - тогда достаточно пункта 2
← →
GrayFace © (2007-08-28 18:25) [11]Rouse_ © (24.08.07 21:27) [2]
0eedfade - говорит о том что памяти нема... Что говорит либо о хорошем мемлике, либо о том что ее действительно нема...
Как Вы это узнали?
TStas © (25.08.07 4:42) [3]
А ещё так бывает, когда объект уже уничтожин, при жизни у него был адрес 0x7c812a5b и с ним что-то сделать хотят.
Не бывает, т.к. 0x7c812a5b - это kernel32.dll
__DATA__ (27.08.07 17:02) [9]
Увеличил размер файла подкачки, всеравно ошибка выскакивает примерно с той же частотой раз в 1-2 часа, видимо это не связано с утечкой памяти, хоть и небольшая утечка памяти в программе есть ...
Независимо от файла подкачки, у программы в Win32 есть менее 2Гб (при особых настройках - менее 3Гб) виртуальной памяти, может кончается она... В любом случае, как-то жирно.
← →
GrayFace © (2007-08-28 18:26) [12]* 0x7c812a5b - это kernel32.dll в ХР
← →
georgius © (2007-08-29 08:20) [13]Чтобы проверить гипотезу об исчерапнии памяти достаточно предложить юзеру нажать Ctrl+Alt+Del и посмотреть в Task Manager-е колонку "память".
Но что-то мне подсказывает, что дело не в этом. ActiveX-ы какие-нибудь используются?
← →
__DATA__ (2007-08-31 15:04) [14]Вот тут утечка памяти, почему происходит понять не могу :
procedure TMain.ServerSocketClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
SockStream : TWinSocketStream;
begin
try
if not Socket.Connected then
Exit;
str := Socket.ReceiveText;//Copy(Socket.ReceiveText,Pos("/",Socket.ReceiveText),Pos(" HTTP/",Socket.ReceiveText)-Pos("/",Socket.ReceiveText));
if str = "" then
Exit;
IP := Socket.RemoteAddress;
Params.Text := DATAMOD.DATA.GetHTTPParams(str);
if pos("GET ", str) > 0 then
begin
str := Trim(Copy(str, pos("GET ", str)+5,Length(str)));
Delete(str, pos(" HTTP/", str), Length(str));
end
...
DATAMOD.DATA.SendStream(Socket,Main.GetFileSource(str,IP));
...
finally
if strl <> nil then
begin
strl.Free;
strl := nil;
end;
if Params <> nil then
begin
Params.Free;
Params := nil;
end;
if SockStream <> nil then
begin
SockStream.Free;
SockStream := nil;
end;
if Socket <> nil then
begin
Socket.Close;
Socket.Free;
Socket := nil;
end;
end;
function TMain.GetFileSource(FileName,IP: String): TStream;
var
strl,strl2: TStringList;
i: Integer;
s: String;
begin
try
strl := TStringList.Create;
strl2 := TStringList.Create;
if not FileExists(FileName) then
begin
Delete(FileName,Length(FileName)-(Length(ExtractFileExt(FileName))-1),Length(FileName));
FileName := FileName+".htm";
end;
if not FileExists(FileName) then
begin
Delete(FileName,Length(FileName)-(Length(ExtractFileExt(FileName))-1),Length(FileName));
FileName := FileName+".html";
end;
if not FileExists(FileName) then
begin
if FileExists(ExtractFilePath(ParamStr(0))+"DATA\HTTPServerPages\Begin.htm") then
begin
strl2.LoadFromFile(ExtractFilePath(ParamStr(0))+"DATA\HTTPServerPages\Begin.htm");
strl.Text := strl2.Text;
end;
if FileExists(ExtractFilePath(ParamStr(0))+"DATA\HTTPServerPages\FaildRequest.htm") then
begin
strl2.LoadFromFile(ExtractFilePath(ParamStr(0))+"DATA\HTTPServerPages\FaildRequest.htm");
strl.Add(strl2.Text);
end;
if FileExists(ExtractFilePath(ParamStr(0))+"DATA\HTTPServerPages\End.htm") then
begin
strl2.LoadFromFile(ExtractFilePath(ParamStr(0))+"DATA\HTTPServerPages\End.htm");
strl.Add(strl2.Text);
end;
Result := TStringStream.Create(strl.Text);
end
else
begin
if (DATA.CmpStr(ExtractFileName(FileName),"Alert.htm"))or(DATA.CmpStr(ExtractFileNa me(FileName),"Alert.html")) then
begin
strl.LoadFromFile(FileName);
s := strl.Text;
i := pos(AnsiUpperCase("#AlertText#"),AnsiUpperCase(s));
while i>0 do
begin
Delete(s,i,Length("#AlertText#"));
Insert(IP,s,i);
i := pos(AnsiUpperCase("#AlertText#"),AnsiUpperCase(s));
end;
Result := TStringStream.Create(s);
Exit;
end
else
if (CmpStr(ExtractFileExt(FileName),".HTML"))or(CmpStr(ExtractFileExt(FileName),".H TM"))or(CmpStr(ExtractFileExt(FileName),".JS")) then
begin
strl.LoadFromFile(FileName);
strl.Text := HTTPServerReplasePath(strl.Text,IP);
strl.Text := ReplaceJSCmd(strl.Text,IP);
Result := TStringStream.Create(strl.Text);
//strl.SaveToStream(Result);
end
else
begin
i := pos("/",FileName);
while i>0 do
begin
Delete(FileName,i,1);
Insert("\",FileName,i);
i := pos("/",FileName);
end;
Result := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
end;
end;
finally
strl.Free;
strl2.Free;
end;
end;
> georgius © (29.08.07 08:20) [13]
Уже попросил посмотреть, думаю в понедельник будет информация о используемой памяти
ActiveX-ы не используется
← →
__DATA__ (2007-08-31 15:06) [15]
function TDATA.SendStream(var Socket: TCustomWinSocket; Stream: TStream): Boolean;
begin
Socket.SendStream(Stream);
end;
← →
Сергей М. © (2007-08-31 15:39) [16]Справку к TCustomWinSocket.SendStream читал ? Внимательно читал ?
← →
Kolan © (2007-09-01 18:40) [17]> 0x7c812a5b — это kernel32.dll в ХР
А как вы это узнали?
:)
← →
Leonid Troyanovsky © (2007-09-01 20:49) [18]
> Kolan © (01.09.07 18:40) [17]
> > 0x7c812a5b — это kernel32.dll в ХР
> А как вы это узнали?
kernel32 обычно мапится на $7C800000.
Т.е., можно даже предположить, что это произошло
в недрах функции RaiseException.
--
Regards, LVT.
← →
evvcom © (2007-09-03 10:52) [19]
> finally
> if strl <> nil then
> begin
> strl.Free;
> strl := nil;
> end;
1. Что такое strl? Вроде не локальная переменная. Нигде в этой функции не видно ее создания. Если здесь она не создается, почему здесь она убивается?
2. Free сама проверит на nil, потому лишняя проверка.
3. Куча Free в одном finally - не гарантия того, что все, что нужно, будет убито.
Грубое нарушение вот таких несложных правил неизбежно ведет и к мемликам, и другим трудно уловимым ошибкам.
P.S. Дальше первой процедуры нИАсилил :)
← →
GrayFace © (2007-09-04 16:44) [20]Kolan © (01.09.07 18:40) [17]
> А как вы это узнали?
> :)
try
raise Exception.Create("") at $7c812a5b;
except
ShowException(ExceptObj, ExceptAddr);
end;
:)
(по-моему, не ShowException называется, лежит в SysUtils)
А еще на диске к Рихтеру была полезная прога для определения, какие dll-ки какими процессами загружены по каким адресам, да и другие подобные проги есть.
← →
__DATA__ (2007-09-04 17:38) [21]А как узнать номер строки кода (в .pas)исходя из шестнадцатиричного адреса(в ошибке), если этот адрес расположен в сегментах моего приложения?
← →
Германн © (2007-09-04 17:43) [22]
> __DATA__ (04.09.07 17:38) [21]
>
> А как узнать номер строки кода (в .pas)исходя из шестнадцатиричного
> адреса(в ошибке), если этот адрес расположен в сегментах
> моего приложения?
>
В [4] уже сказали как.
← →
__DATA__ (2007-09-05 06:56) [23]
> Можно воспользоваться пунктом Search-Find Error в делфи,
> чтобы найти место ошибки по адресу.
В контексном меню окна CPU нажимаю View source и нечего не происходит :( Почему?
← →
Сергей М. © (2007-09-05 08:17) [24]
> Почему?
Потому что нет исходников для указанного кода.
← →
Slym © (2007-09-05 10:17) [25]WEB сервер пишешь... маладец
Налицо неправильная работа с сокетом...
Use TWinSocketStream to read or write information over a blocking socket connection
ServerSocketClientRead - указывает обратное неблокирующий режим
SendStream - не успевает полностью отослать данные, т.к. неблокирующий режим
← →
Slym © (2007-09-05 10:21) [26]str := Socket.ReceiveText;
Params.Text := DATAMOD.DATA.GetHTTPParams(str);
Не факт что весь запрос придет одним ReceiveText...
Чем IDHTTPServer не нравится? (мне ненравится и чем я знаю)
← →
Slym © (2007-09-05 10:28) [27]
i := pos(AnsiUpperCase("#AlertText#"),AnsiUpperCase(s));
while i>0 do
begin
Delete(s,i,Length("#AlertText#"));
Insert(IP,s,i);
i := pos(AnsiUpperCase("#AlertText#"),AnsiUpperCase(s));
end;
можно заменить на:StringReplace(s,"#AlertText#",IP,[rfReplaceAll, rfIgnoreCase]);
← →
Slym © (2007-09-05 10:31) [28]
if Socket <> nil then
begin
Socket.Close;
Socket.Free;
Socket := nil;
end;
еще раз: у тебя неблокирующий режим! за один ServerSocketClientRead ничего не успеет произойти а ты его песпардонно гасишь
← →
__DATA__ (2007-09-06 15:42) [29]
> Чем IDHTTPServer не нравится? (мне ненравится и чем я знаю)
А как в этом компоненте получать содержимое полей HTML формы?
Вот форма:
document.write("<FORM METHOD=POST action="http://192.168.1.290:6280/Refresh/login_card">");
document.write("<font color=White>Login :</font><br>");
document.write("<input type="text" name="log" size="30"><br>");
document.write("<font color=White>Password :</font><br>");
document.write("<input type="password" name="pass" size="30"><br>");
document.write("<input type="submit" name="submit" value="Enter"><br>");
document.write("<font color=white>Service:</font><br>");
document.write("<select name="usluga">");
document.write("<option value="Games">Games</option>");
document.write("</select><br>");
document.write("</form>");
Все свойства компонента пересмотрел нету содержимого полей!
Или может как-то можно получить запрос целиком(как у Socket.ReceiveText в TServerSocketClientRead)? чтобы выдрать содержание полей HTML формы самому?
← →
Anatoly Podgoretsky © (2007-09-06 16:01) [30]
> http://192.168.1.290:6280/Refresh/login_card"
Вот он, целиком и есть.
← →
__DATA__ (2007-09-06 16:15) [31]
> Anatoly Podgoretsky © (06.09.07 16:01) [30]
Вот что я получаю от этой формы в TserverSocketClientRead Socket.ReciveText
POST /Refresh/login_card HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/x-icq, application/vnd.ms-excel, application/msword, */*
Referer: http://127.0.0.1:6879/Block.htm
Accept-Language: ru
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)
Host: 198.162.0.90:6280
Content-Length: 42
Connection: Keep-Alive
Cache-Control: no-cache
log=test&pass=&submit=Sign+in&usluga=Games
Так вот от IdHTTPServer хотелось бы получить тоже самое, чтобы выдрать и обработать строкуlog=test&pass=&submit=Sign+in&usluga=Games
Либо можно получить только эту строку. В ARequestInfo.Params.Text я смотрел, так же как в многих других свойствах, везде пустота.
Где в IdHTTPServerCommandGet можно получить запрос целиком или получить параметры отдельно?
← →
__DATA__ (2007-09-07 13:09) [32]Удалено модератором
← →
__DATA__ (2007-09-08 12:54) [33]Удалено модератором
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.10.07;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.069 c